您的位置:首页 > 移动开发 > Android开发

Android项目2之横屏和竖屏切换

2015-06-16 20:49 531 查看
xml代码

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

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    <Button

        android:id="@+id/change"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="改变屏幕方向为横屏显示(当前为竖屏显示)" />

    <ImageView

        android:id="@+id/img"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:src="@drawable/ok" />

</LinearLayout>

 

 

 

java代码:

package cn.chenzhenhua.www.helloworld;

import android.app.Activity;

import android.content.pm.ActivityInfo;

import android.content.res.Configuration;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

public class MainActivity extends Activity {

 

 private Button chane=null;

 private ImageView img=null;

 

 private static final String TAG = "zhua";

 

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  

  this.chane=(Button)super.findViewById(R.id.change);

  this.img=(ImageView)super.findViewById(R.id.img);

  this.chane.setOnClickListener(new OnClickListener(){

   @Override

   public void onClick(View v) {

    // TODO Auto-generated method stub

    Log.i(TAG,"MyOnClickListener");

    

    if (MainActivity.this.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {

     MainActivity.this.chane.setText("错误:无法改变屏幕方向!");

    } else {

     if (MainActivity.this.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {

      // 当前屏幕为横屏显示

      MainActivity.this

        .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

     } else if (MainActivity.this.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {

      // 当前屏幕为横屏显示

      MainActivity.this

        .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

     }

    }

   }

   

  });

  

 }

 

 @Override

 public void onConfigurationChanged(Configuration newConfig) {

  // 系统设置改变时触发

  

  Log.i(TAG,"onConfigurationChanged");

  

  if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

   Log.i(TAG,"当前屏幕方向为横屏");

   MainActivity.this.chane.setText("改变屏幕方向为竖屏显示(当前屏幕为横屏)");

   MainActivity.this.img.setImageResource(R.drawable.error);

  } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

   Log.i(TAG,"当前屏幕方向为竖屏");

   MainActivity.this.chane.setText("改变屏幕方向为横屏显示(当前屏幕为竖屏)");

   MainActivity.this.img.setImageResource(R.drawable.ok);

  }

  

  super.onConfigurationChanged(newConfig);

 };

}

 

 

配置文件代码:

 <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MainActivity"

            android:label="@string/app_name"

            android:configChanges="orientation|keyboard|keyboardHidden|screenSize"

            android:screenOrientation="portrait">

            <intent-filter>

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

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

            </intent-filter>

        </activity>

    </application>

 

 

效果图:

 



 

注意

onConfigurationChanged在Android4.0中不执行解决办法:

 

首先在manifest文件中配置了android:configChanges="orientation|keyboard",然后在Activity中Override了onConfigurationChanged方法,但是无论怎么着,这个方法就是不执行

今天找到解决方法,要在configChanges中加screenSize这个属性才回执行到onConfigurationChanged

android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: