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. Canvas处理头像上传

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

  2. android总结

    针对Android有以下几点需要注意: 1.是不是应该把数据刷新操作放在onResume()中?     @Override     public void onResume() {          ...

  3. IOS init initWith 等相关集中

    1.initWithCoder    当一个view从nib初始化的时候,会调用这个函数.  用keyedArchiver序列化一个类的实力,后面用keyedUnArchiver拿回来的时候会调用到 ...

  4. BFC--绝对值得你思考

    CSS BFC(Block Formatting Context)      BFC是W3C CSS 2.1规范中的一个概念,他决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用.     ...

  5. CSS:7个你可能不认识的单位

    原文:7 CSS Units You Might Not Know About 众所周知,当使用CSS技术的时候,很容被一些奇异问题给困住.而当我们面对新的问题时,这会让我们处于非常不利的位置. 但是 ...

  6. 基于GPL329xx linux平台电容屏gsl1680的驱动调试分析

    因客户有用到了gsl1680 7寸电容屏,所以拿了一块过来,便在329xx的平台上面开始调试了. 大概浏览了一下所提供的资料,只有介绍模组的资料跟一份中文版的datasheet,datasheet只是 ...

  7. 1.2……初识Android开发

    Android体系结构 Dalvik VM(Android下的java虚拟机)与传统的JVM的区别 传统JVM 基于堆栈的架构 编写.java文件--->编译为.class文件--->打包 ...

  8. [Hive - LanguageManual ] ]SQL Standard Based Hive Authorization

    Status of Hive Authorization before Hive 0.13 SQL Standards Based Hive Authorization (New in Hive 0. ...

  9. Trail: JDBC(TM) Database Access(1)

    package com.oracle.tutorial.jdbc; import java.sql.BatchUpdateException; import java.sql.Connection; ...

  10. <Chapter 2>2-2-1.用户偏好模式(The User Preferences Pattern)

    在这个模块中我们要创建的应用是一个简单的钟.当一个用户访问这个网站时,这个应用会更具服务器的系统时间显示当前的时间.默认情况下,这个应用使用标准国际时间(UTC)时区显示当前时间.用户可以使用Goog ...