`
xiehongdong
  • 浏览: 69197 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android动态更改屏幕方向

 
阅读更多

在androd中要通过程序改变屏幕显示的方向,必须覆盖setRequestOrientation()方法,若要取得目前屏幕方向则需要用到getRequestOrientation()方法。
本例子实现了简单的改变屏幕方向,通过一个按钮点击事件,判断当前的屏幕方向,例如竖排(PORTRAIT),则改为横排(LANDSCAPE);
本程序重写setRequestOrientation()方法,起目的是为了要捕捉设置屏幕放向的同时所触发的事件,并在更改的时候以Toast显示要更改的方向。
程序一开始闲判断getRequestOrentation()的值是否为-1,表示在Activity属性里没有设置android:screenOrientation="portrait",这意味着即使点击按钮也无法判断屏幕的方向,不会进行更改方向的事件了。

布局文件main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
	android:id="@+id/textView01"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text=""
    />
<Button 
	android:id="@+id/button01"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:gravity="center_horizontal"
	android:text="@string/button_text01"/>
</LinearLayout>

 OrientationActivity.java

public class OrientationActivity extends Activity {
	private TextView tv;
	private Button button;
	
	private Resources rs;
	private Display display;
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        display = getWindow().getWindowManager().getDefaultDisplay();
        tv = (TextView) this.findViewById(R.id.textView01);
        button = (Button) this.findViewById(R.id.button01);
        rs = this.getResources();
        if(getRequestedOrientation() == -1){
        	tv.setText(rs.getText(R.string.err_msg));
        }
        
        button.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				/* 方法一 */
				if(getRequestedOrientation() == -1){
					tv.setText(rs.getText(R.string.err_msg));
				}else{
					/* 方法一 */
//					if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
//						/* 若当前为横排则改为竖排 */
//						setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//					}else if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
//						/* 若当前为竖排则改为横排 */
//						setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//					}
					int h = display.getHeight();
					int w = display.getWidth();
					if(w < h){
						setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
					}else{
						setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
					}
				}
			}
        	
        });
    }
    
    /* (non-Javadoc)
     * @see android.app.Activity#setRequestedOrientation(int)
     */
    @Override
    public void setRequestedOrientation(int requestedOrientation) {
    	switch (requestedOrientation) {
		case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
			MakeTextToast.showToast(OrientationActivity.this,rs.getText(R.string.msg_2).toString() , true);
			break;
		case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
			MakeTextToast.showToast(OrientationActivity.this,rs.getText(R.string.msg_2).toString() , true);
			break;
		default:
			break;
		}
    	super.setRequestedOrientation(requestedOrientation);
    }
    
    /* (non-Javadoc)
     * @see android.app.Activity#getRequestedOrientation()
     */
    @Override
    public int getRequestedOrientation() {
    	// TODO Auto-generated method stub
    	return super.getRequestedOrientation();
    }
}

 MakeTextToast.java

public class MakeTextToast {
	/**
	 * 显示Toast
	 * @param context
	 * @param msg 信息
	 * @param isLong 显示时间长短
	 */
	public static void showToast(Context context,String msg,boolean isLong){
		if(isLong){
			Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
		}else{
			Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
		}
	}
}

 

Manifest.xml

<application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".OrientationActivity"
                  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>

 运行结果图:

竖排:

 

横排:
 

 

  • 大小: 13.3 KB
  • 大小: 15.5 KB
分享到:
评论

相关推荐

    android改变变屏幕方向.docx

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

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

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

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

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

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

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

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

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

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

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

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

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

    android屏幕的切换

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

    android 自适应屏幕翻转

    然而,单纯的屏幕方向改变可能导致`onCreate()`方法被多次调用,这在某些情况下会导致不必要的资源重新加载或状态丢失,影响应用性能和用户体验。 #### 四、解决屏幕翻转带来的问题 为了避免屏幕翻转过程中`...

    Android屏幕旋转

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

    android自定义圆盘方向按钮

    通过滑动屏幕,你可以看到箭头根据手指移动的方向变化。这种自定义控件的实现方式为开发者提供了更大的灵活性,可以根据项目需求进一步扩展功能,如添加动画效果、触摸反馈等。 总之,创建一个自定义的圆盘方向按钮...

    Android屏幕旋转Demo

    Android系统支持四种主要的屏幕方向:portrait(竖屏)、landscape(横屏)、reverse portrait(反向竖屏)和reverse landscape(反向横屏)。这些方向可以通过设备传感器或用户手动切换。默认情况下,Android会根据...

    android动态壁纸源码

    这些事件可以用来改变壁纸的行为,比如在这个例子中,可能用户触摸屏幕时会改变立方体的旋转速度或方向。 在Android项目中,动态壁纸的配置文件一般位于`res/xml/wallpaper.xml`,这里会定义壁纸服务的相关元数据,...

    屏幕方向锁定后自动旋转

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

    QT安卓屏幕动态旋转

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

    Android自适应屏幕大小和layout布局(横屏竖屏)

    - 屏幕方向的改变通常会导致Activity的重新创建。 - 为了避免数据丢失,开发者需要在Activity的生命周期方法中保存和恢复状态。 - 例如,可以使用`onSaveInstanceState`方法保存状态,在`onCreate`方法中恢复状态...

    Android项目关于自适应屏幕方向和大小的一些经验.rar

    在Android应用开发中,自适应屏幕方向和大小是至关重要的,因为Android设备有着广泛的屏幕尺寸和比例。这个压缩包文件“Android项目关于自适应屏幕方向和大小的一些经验”可能包含了如何处理不同屏幕尺寸和方向的...

    Android 屏幕旋转Demo

    1. **配置变更(Configuration Changes)**:在Android中,屏幕旋转被视作一种配置变更,因为它改变了设备的屏幕方向,从而可能影响应用的界面布局和行为。例如,从横屏切换到竖屏,屏幕宽度和高度会发生变化。 2. **...

Global site tag (gtag.js) - Google Analytics