LANDSCAPE与PORTRAIT

范例说明

要如何通过程序控制Activity的显示方向?在Android中,若要通过程序改变屏幕显示的方向,必须要覆盖 setRequestedOrientation()方法,而若要取得目前的屏幕方向,则需要访问getRequestedOrientation()方 法。

本 范例为求简要示范更改做法,设计了一个按钮,当单击按钮的同时,判断当下的屏幕方向,例如竖排(PORTRAIT),则将其更改为横排 (LANDSCAPE);若为横排(LANDSCAPE),则将其更改为竖排(PORTRAIT),范例非常简单。图5-25所示是运行的结果。

本程序重写setRequestedOrientation()方法,其目的是为了要捕捉设置屏幕方向的同时所触发的事件,并在更改的时候,以Toast显示要更改的方向。

范例程序

src/irdc.ex05_22/EX05_22.java

程 序一开始(onCreate)先判断getRequestedOrientation()的值是否为-1,若此值为-1,表示在Activity属性里没 有设置Android:screenOrientation的值,这意味着即使单击按钮,也无法判断屏幕的方向,不会进行更改方向的事件了。

在 被覆盖的setRequestedOrientation()事件里,会传入要转换的方向常数(requestedOrientation),其值为整数 类型,有以SCREEN_ORIENTATION_PORTRAIT及SCREEN_ORIENTATION_LAN- DSCAPE两个指定常数。

/* import程序略 */

import android.content.pm.ActivityInfo;

import android.view.Display;

public class EX05_22 extends Activity

{

private TextView mTextView01;

private Button mButton01;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mButton01 = (Button)findViewById(R.id.myButton1);

mTextView01 = (TextView)findViewById(R.id.myTextView1);

if(getRequestedOrientation()==-1)

{

mTextView01.setText(getResources().getText

(R.string.str_err_1001));

}

/* 当单击按钮旋转屏幕画面 */

mButton01.setOnClickListener(new Button.OnClickListener()

{

@Override

public void onClick(View arg0)

{

/* 方法一:重写getRequestedOrientation */

/* 若无法取得screenOrientation属性 */

if(getRequestedOrientation()==-1)

{

/* 提示无法进行画面旋转功能,因无法判别Orientation */

mTextView01.setText(getResources().getText

(R.string.str_err_1001));

}

else

{

if(getRequestedOrientation()==

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

{

/* 若目前为横排,则更改为竖排呈现 */

setRequestedOrientation

(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

else if(getRequestedOrientation()==

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

{

/* 若目前为竖排,则更改为横排呈现 */

setRequestedOrientation

(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

}

}

}

});

}

@Override

public void setRequestedOrientation(int requestedOrientation)

{

// TODO Auto-generated method stub

/* 判断要更改的方向,以Toast提示 */

switch(requestedOrientation)

{

/* 更改为LANDSCAPE */

case (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE):

mMakeTextToast

(

getResources().getText(R.string.str_msg1).toString(),

false

);

break;

/* 更改为PORTRAIT */

case (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT):

mMakeTextToast

(

getResources().getText(R.string.str_msg2).toString(),

false

);

break;

}

super.setRequestedOrientation(requestedOrientation);

}

@Override

public int getRequestedOrientation()

{

// TODO Auto-generated method stub

/* 此重写getRequestedOrientation方法,可取得目前屏幕的方向 */

return super.getRequestedOrientation();

}

public void mMakeTextToast(String str, boolean isLong)

{

if(isLong==true)

{

Toast.makeText(EX05_22.this, str, Toast.LENGTH_LONG).show();

}

else

{

Toast.makeText(EX05_22.this, str, Toast.LENGTH_SHORT).show();

}

}

}

AndroidManifest.xml

请留意在AndroidManifest.xml当中需要设置Activity的Android:screenOrientation属性,否则,程序将无法通过getRequestedOrientation()方法,来判断现在Activity的方向。

<manifest< p="">

xmlns:android="http://schemas.android.com/apk/res/android"

package="irdc.ex05_22"

android:versionCode="1"

android:versionName="1.0.0">

<application< p="">

android:icon="@drawable/icon"

android:label="@string/app_name">

<activity< p="">

android:name=".EX05_22"

android:label="@string/app_name"

android:screenOrientation="portrait">

扩展学习

在上面的程序里,是以调用getRequestedOrientation()方法来判断单击按钮时,屏幕的显示方向虽然程序也可以进行判断,但以下方法可以适用在长宽比不一样的手机上。

/* 方法二:判断屏幕宽高比 */

final Display defaultDisplay =

getWindow().getWindowManager().getDefaultDisplay();

int h= defaultDisplay.getHeight();

int w = defaultDisplay.getWidth();

/* 此分辨率为按钮单击当下的分辨率 */

mTextView01.setText

(Integer.toString(h)+"x"+Integer.toString(w));

/if(w > h)

{

/* Landscape */

/* 重写Activity里的setRequestedOrientation()方法 */

setRequestedOrientation

(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

else

{

/* Portrait */

setRequestedOrientation

(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

}

android 动态改变屏幕方向的更多相关文章

  1. Android实现动态改变屏幕方向(Landscape & Portrait)

    1.AndroidManifest.xml: <activity> android:screenOrientation="portrait" ... 2.xx.java ...

  2. 详解Android中的屏幕方向

    屏幕方向 是对Activity而言的,所以你可以在AndroidManifest.xml 文件中,通过<activity> 标记的screenOrientation 属性进行设定,例如: ...

  3. Android开发之屏幕方向

    一.处理屏幕方向变化的两种技术 1.锚定方法 2.调整大小和重新定位,这种方法一般是分别为横向和纵向两种模式各自定义用户界面xml界面文件,当方向变化时读取对应的界面配置文件即可. 二.检测屏幕方向改 ...

  4. android 动态改变listview的内容

    本文模拟:点击一个按钮,为已有的listview添加一行数据 <?xml version="1.0" encoding="utf-8"?> < ...

  5. 【转】Android动态改变对 onCreateDialog话框值 -- 不错不错!!!

    原文网址:http://www.111cn.net/sj/android/46484.htm 使用方法是这样的,Activity.showDialog()激发Activity.onCreateDial ...

  6. Android 动态改变高度以及计算长度的EditText

    前段时间项目需求,需要做一个有限制长度的输入框并动态显示剩余文字,同时也要动态改变EditText的高度来增加用户体验.现整理出来与大家分享. 先来看看效果图 看了效果就分享一下布局 <Rela ...

  7. Android 动态改变布局属性RelativeLayout.LayoutParams.addRule()

    我们知道,在 RelativeLayout 布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可. 但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的 ...

  8. android 动态改变控件位置和大小 .

    动态改变控件位置的方法: setPadding()的方法更改布局位置. 如我要把Imageview下移200px:             ImageView.setPadding( ImageVie ...

  9. Android动态改变App在Launcher里面的icon

    如果呆萌的产品童鞋让你动态更换App在Launcher里面的Icon,你怎么回答他,下文就提出一种实现该效果的方法. 原理1--activity-alias 在AndroidMainifest中,有两 ...

随机推荐

  1. Windows 编译器选项 Runtime Library

    https://msdn.microsoft.com/library/2kzt1wy3%28v=vs.100%29.aspx http://blog.csdn.net/ybxuwei/article/ ...

  2. Canvas处理头像上传

    未分类 最近社区系统需要支持移动端,其中涉及到用户头像上传,头像有大中小三种尺寸,在PC端,社区用Flash来处理头像编辑和生成,但该Flash控件的界面不友好而且移动端对Flash的支持不好,考虑到 ...

  3. gitlab的使用

    Gitlab的使用 最近成功的在公司部署了gitlab,鉴于同学们还不会使用,这里写篇博客说明下.如果想安装gitlab的话,需要一些linux的基础知识,我在这里记录了我安装的参考<http: ...

  4. linux命令——磁盘管理pwd

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径(绝对路径). 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录.在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的 ...

  5. Oracle中表结构和表内容复制

    处理该问题注意以下几点: 1. 清空表中数据SQL:truncate table table_name; 2.复制表结构SQL:create table table_name1 as select * ...

  6. ARM指令集----杂项指令

    ARM指令集可以分为6类,即是跳转指令,数据处理指令,程序状态传输指令,Load.Store指令,协处理器指令和异常中断指令 跳转指令: 在ARM中有两种方式可以实现程序的跳转,一种是跳转指令,另一种 ...

  7. 用Python操作Mysql

    平时的主要编程语言是Java,开发时也主要用Mysql,经常为了测试,调试的目的需要操作数据库,比如备份,插入测试数据,修改测试数据,有些时候不能简单的用SQL就能完成任务,或都很好的完成任务,用Ja ...

  8. PHP获取Cookie模拟登录

    关键字:CURL Cookie CURLOPT_COOKIEJAR CURLOPT_COOKIEFILE 模拟登录 PHP作者:方倍工作室原文:http://www.cnblogs.com/txw19 ...

  9. c++ 概念及学习/c++ concept&learning(三)

    这一篇继续说说程序设计中的基本语句:控制块 一 if类控制语句 if if else if  , else if ,else if(条件语句){如果条件为真,要做的一些事情}  if(条件语句) {如 ...

  10. 【恒天云技术分享系列11】Sheepdog简介

    sheepdog是近几年开源社区新兴的分布式块存储文件系统,采用完全对称的结构,没有类似元数据服务的中心节点.这种架构带来了线性可扩展性,没有单点故障和容易管理的特性.对于磁盘和物理节点,SheepD ...