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. 关于DatePicker控件在IsEnabled为False视觉效果没有明显辨识度的处理方法

    DatePicker控件在IsEnabled为False时界面没有让人看上去不可用(背景为灰色等)的效果.容易让用户迷惑. 可以用下面的代码增加设置透明度的触发器来解决(XAML以及C#方式): &l ...

  2. 【转】u盘不显示盘符

    转自http://jingyan.baidu.com/article/f3ad7d0fd0793e09c3345b31.html 我的情况: 电脑只有一个c盘,插入u盘,u盘的盘符为d. 弹出u盘,但 ...

  3. DataSet DataTable操作

    DataSet ds = new DataSet();            DataTable dt = new DataTable("OrderList");          ...

  4. (转)我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  5. JQuery WEB前段开发

    JQuery WEB前段开发 Jquery是继prototype之后又一个优秀的Javascript框架.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, S ...

  6. LeetCode题解——String to Integer(atoi)

    题目: 字符串转换为数字. 解法: 这道题的意思是要考虑到,如果有前置的空字符,则跳过:如果超出数字范围,则返回最大/最小整数:如果碰到第一个不能转换的字符,则返回. 代码: class Soluti ...

  7. LeetCode题解——Unique Path(DP与优化)

    题目:A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...

  8. Python 核心数据类型

    1.Python中一切皆对象 2.Python中不需要申明对象类型,对象的类型由运行的表达式决定 3.创建了对象意味着绑定了对象的操作到此对象,也就是在固有的对象上只能调用该对象特有的操作.比如只能将 ...

  9. JAVA与图形界面开发(Applet应用程序、AWT库、Swing)

    Applet 1)简单说,Applet就是嵌入到网页中的小程序,Java代码. 2)编写Applet程序,要继承JApplet类,并根据自己需要覆写相关方法(init.start.stop.destr ...

  10. JDBC学习笔记(2)——Statement和ResultSet

    Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement ...