`
java-admin
  • 浏览: 1382290 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

动态更改屏幕方向

阅读更多

 

LANDSCAPEPORTRAIT

要如何通过程序控制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_PORTRAITSCREEN_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当中需要设置ActivityAndroid:screenOrientation属性,否则,程序将无法通过getRequestedOrientation()方法,来判断现在Activity的方向。

 

<?xml version="1.0" encoding="utf-8"?>

<manifest

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

  package="irdc.ex05_22"

  android:versionCode="1"

  android:versionName="1.0.0">

  <application

    android:icon="@drawable/icon"

    android:label="@string/app_name">

    <activity

      android:name=".EX05_22"

      android:label="@string/app_name"

      android:screenOrientation="portrait">

      <intent-filter>

        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />

      </intent-filter>

    </activity>

  </application>

<uses-sdk android:minSdkVersion="7" />

</manifest>

在上面的程序里,是以调用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);

}

分享到:
评论

相关推荐

    强制改变屏幕方向的小工程

    然而,如果希望在运行时动态改变屏幕方向,就需要编程的方式来实现。这个小工程中可能包含一个名为`OrientationChanger`的类,它可能提供了如下功能: 1. **获取当前屏幕方向**:使用`Display`对象的`getRotation()...

    以编程方式更改屏幕方向 更改屏幕方向 修改分辨率

    在编程领域,尤其是在开发桌面应用或者游戏时,有时我们需要根据应用程序的需求动态地调整用户的屏幕方向或分辨率。在C#中,这可以通过Windows API调用来实现。本文将详细讲解如何使用C#来更改屏幕方向和修改分辨率...

    屏幕方向锁定后自动旋转.zip

    JavaApk源码中可能包含了对`Activity`的重写,特别是`onConfigurationChanged`方法,这是Android系统在检测到设备配置改变(如屏幕方向变化)时调用的。开发者可以在这个方法中添加逻辑,防止在屏幕方向锁定时改变...

    Android 屏幕旋转(改变屏幕方向).rar

    Android 屏幕旋转实例,改变屏幕方向,这个和平时的锁定屏幕方向有关联,其基本的实现思路如下:  public void onConfigurationChanged(Configuration newConfig) {   Toast.makeText(this, "系统的屏幕方向发生...

    Android屏幕旋转

    除了在AndroidManifest.xml中静态配置,开发者还可以在代码中动态改变屏幕方向: ```java Activity activity = ...; activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 横屏 ...

    Android改变手机屏幕朝向的方法

    如果想要在运行时动态改变屏幕方向,可以调用Activity的`setRequestedOrientation()`方法。例如,当用户点击一个按钮时,可以切换屏幕方向: ```java Button btn = findViewById(R.id.btn); btn.setOnClickListener...

    android改变变屏幕方向.docx

    开发者还可以通过API动态改变Activity的屏幕方向。例如,以下代码展示了如何使用`setRequestedOrientation()`方法切换横屏和竖屏: ```java public void apiChangeOrientation() { // 获取当前屏幕方向 int ...

    android屏幕的切换

    2. **动态改变屏幕方向**:除了静态配置,还可以在代码中动态改变Activity的屏幕方向。通过调用`setRequestedOrientation()`方法,传入对应的屏幕方向常量,如`ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE`或`...

    安卓摇一摇传感器相关-根据重力感应旋转屏幕支持4个方向旋转.rar

    此外,某些设备或系统版本可能不支持动态改变屏幕方向,这种情况下需要在AndroidManifest.xml中为Activity指定允许的屏幕方向。 在描述中提到,提供的代码可能并未全部验证,且可能需要开发者根据实际情况进行调试...

    屏幕方向锁定后自动旋转

    3. **重写Activity的onConfigurationChanged()**:为了在屏幕方向改变时不重新创建Activity,需要在AndroidManifest.xml中对应的Activity标签中添加`android:configChanges="orientation|screenSize"`,然后在...

    android Activity始终横屏、全屏、屏幕方向改变等屏幕相关.doc

    本篇文章将深入探讨如何控制Android Activity的屏幕方向,实现始终横屏、全屏显示以及如何处理屏幕方向改变时Activity的销毁与重建问题。 1. **屏幕始终横屏或竖屏** 在AndroidManifest.xml中,我们可以为特定的...

    C#调节显示方向代码

    `ChangeDisplaySettingsEx`函数是关键,它接收一个`DEVMODE`结构体作为参数,通过修改其中的`dmDisplayOrientation`字段来改变屏幕方向。这个字段可以设置为`DMDO_DEFAULT`(默认)、`DMDO_90`(横向)、`DMDO_180`...

    swift-带有Camera的View手动及自动设置屏幕方向汇总

    1. 调整`statusBarOrientation`:可以使用`UIApplication.shared.statusBarOrientation = .landscapeLeft`等代码手动设置状态栏方向,从而改变屏幕方向。 2. 触发旋转通知:通过监听`...

    QT安卓屏幕动态旋转

    7. **代码实现**:在按钮的槽函数中,可以调用Android系统的API来改变屏幕方向,例如`QtAndroidPrivate::runOnAndroidThread()`来执行Android原生代码,然后使用Java层的方法来旋转屏幕。 8. **生命周期管理**:...

    android屏幕控制

    在Activity的代码中,可以使用`setRequestedOrientation()`方法来动态改变屏幕方向: ```java if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { setRequestedOrientation...

    irotate 旋转屏幕方向

    例如,当你需要在狭小的空间中使用笔记本电脑,或者在展示图片、视频时想要提供独特的视角,甚至在某些专业应用如设计、编程或游戏过程中,改变屏幕方向都能带来便利。irotate的易用性使得这些场景的切换变得简单...

    Android项目 手机横竖屏.rar

    3. 动态改变屏幕方向: 默认情况下,Android系统会根据设备的物理方向自动调整屏幕布局。但有时我们希望在特定时刻控制屏幕旋转,可以使用`setRequestedOrientation()`方法,如: ```java Activity activity = .....

    VB 将屏幕旋转180度 垂直倒置显示

    首先,我们要理解屏幕旋转涉及到的操作是更改显示器的显示模式,这通常通过Windows API(应用程序编程接口)来实现。VB提供了调用API函数的能力,我们可以通过声明和使用API函数来访问系统底层的功能。 关键API函数...

    能够改变屏幕分辨率的程序

    改变屏幕分辨率的方法通常是通过操作系统自带的显示设置,但在某些情况下,如游戏、专业设计软件或调试过程中,可能需要自定义非标准分辨率。此时,这样的程序就能派上用场,它可以提供更多的分辨率选项或者自动调整...

    用于android设备默认屏幕方向自适应的电路的制作方法.docx

    【用于Android设备默认屏幕方向自适应的电路的制作方法】 ...这种自适应电路的实施方式是通过跳帽的连接状态改变电路的电平输出,从而指示屏幕的方向,实现了硬件层面的屏幕方向识别,极大地优化了生产流程和用户体验。

Global site tag (gtag.js) - Google Analytics