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. Linux操作系统上用数据泵导库

    1.在Linux上 创建物理目录dp_dir,存放数据库.dmp文件: 用root用户登录,切换到oracle用户,用oralce身份创建物理目录如下: [root@server36 oracle]# ...

  2. 谈谈作为一个菜B的培训感受

    培训的目的是为了让新员工更快的适应当前的工作,尽快的跟上前辈的步伐,从而能全身心的投入到当前的工作当中.感觉在培训的时候需要注意以下的几个问题: 1. 新员工必须在意识上认同当前的工作 如今的项目组也 ...

  3. 测试的rtsp地址

    无线城市 千里眼 http://218.204.223.237:8081/wap/show_video.php?vd=1  右键->复制链接地址即可获得Rtsp地址.

  4. bzoj 3439 Kpm的MC密码(Trie+dfs序+主席树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3439 [题意] 给定若干串,问一个串的作为其后缀的给定串集合中的第k小. [思路] 如 ...

  5. HDU 1890 Robotic Sort(splay)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=1890 [题意] 给定一个序列,每次将i..P[i]反转,然后输出P[i],P[i]定义为当前数字i ...

  6. Tkinter教程之Listbox篇

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1811310 #Tkinter教程之Listbox篇#Listbox为列表框控件,它可以包含一个 ...

  7. Java IO流中的File类学习总结

    一.File类概述 File类位于java.io包中,是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹. File类有多种重载的构造方法.File类保存文件或目录的各种 ...

  8. leetcode@ [354] Russian Doll Envelopes (Dynamic Programming)

    https://leetcode.com/problems/russian-doll-envelopes/ You have a number of envelopes with widths and ...

  9. Android“This Handler class should be static or leaks might occur”警告的处理方法

    此文属于转载! 最近用到handle在线程中改变UI,会跟给出“This Handler class should be static or leaks might occur”的警告,网上看了很多解 ...

  10. 第二百九十、一、二天 how can I 坚持

    上周日,腊八,好冷,去菏泽了.坐火车,没座.好冷,下午菏泽学院,大体看了看,很是怀念,有点遗憾,在网吧玩的时间太长了,留不住. 周一,长太婚礼,竟然没有只是吃了个饭,有点小失望,下午坐车回京,两点坐的 ...