横、竖屏幕动态切换(layout-land 和layout-port)

下面是一个例子程序: 
1.首先通过以下语句设置Activity为无标题和全屏模式: 

Java代码  收藏代码

  1. // 设置为无标题栏  

  2. requestWindowFeature(Window.FEATURE_NO_TITLE);  

  3.   

  4. // 设置为全屏模式  

  5. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  

  6.                      WindowManager.LayoutParams.FLAG_FULLSCREEN);  

  7. setContentView(R.layout.main);  


2.下面给出xml文件配置,这里我们在res目录下建立layout-land和layout-port目录,相应的layout文件不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管模拟器自动寻找 
main.xml文件如下: 

Java代码  收藏代码

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

  2. <LinearLayout  

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

  4.   android:background="@drawable/white"  

  5.   android:orientation="vertical"  

  6.   android:layout_width="fill_parent"  

  7.   android:layout_height="fill_parent"  

  8. >  

  9.   <TextView  

  10.     android:id="@+id/myTextView1"  

  11.     android:layout_width="fill_parent"   

  12.     android:layout_height="wrap_content"  

  13.     android:textColor="@drawable/blue"   

  14.     android:text="the portrait"  

  15.   />  

  16.   <Button  

  17.     android:id="@+id/myButton1"  

  18.     android:layout_width="wrap_content"  

  19.     android:layout_height="wrap_content"  

  20.     android:text="@string/str_button1" />  

  21. </LinearLayout>  


这个xml文件需要在上述所说的2个文件夹下都需要放置. 
3.获取资源id的view: 

Java代码  收藏代码

  1. mButton01 = (Button) findViewById(R.id.myButton1);  

  2. mTextView01 = (TextView) findViewById(R.id.myTextView1);  


4.返回当前显示Activity的显示状态(横屏还是竖屏) 

Java代码  收藏代码

  1. // Return the current requested orientation of the activity  

  2. if (getRequestedOrientation() == -1){  

  3.    mTextView01.setText(getResources().getText(R.string.str_err_1001));  

  4. }  


5.设置按钮点击监听器 

Java代码  收藏代码

  1. /* 当点击按钮旋转屏幕画面 */  

  2.     mButton01.setOnClickListener(new Button.OnClickListener()  

  3.     {  

  4.       // @Override  

  5.       public void onClick(View arg0)  

  6.       {  

  7.         /* 方法一:重写getRequestedOrientation */  

  8.   

  9.         /* 若无法取得screenOrientation属性 */  

  10.         if (getRequestedOrientation() == -1)  

  11.         {  

  12.           /* 提示无法进行画面旋转功能,因无法判别Orientation */  

  13.           mTextView01.setText(getResources().getText(R.string.str_err_1001));  

  14.         } else  

  15.         {  

  16.           if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)  

  17.           {  

  18.             /* 若当下为横排,则更改为竖排呈现 */  

  19.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  

  20.           } else if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)  

  21.           {  

  22.             /* 若当下为竖排,则更改为横排呈现 */  

  23.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  

  24.           }  

  25.         }  

  26.       }  

  27.     });  

  28.   }  


6.改变屏幕显示的函数 

Java代码  收藏代码

  1. @Override  

  2. public void setRequestedOrientation(int requestedOrientation)  

  3. {  

  4.   // TODO Auto-generated method stub  

  5.   

  6.   /* 判断要更改的方向,以Toast提示 */  

  7.   switch (requestedOrientation)  

  8.   {  

  9.     /* 更改为LANDSCAPE */  

  10.     case (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE):  

  11.       mMakeTextToast(getResources().getText(R.string.str_msg1).toString(),  

  12.           false);  

  13.       break;  

  14.     /* 更改为PORTRAIT */  

  15.     case (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT):  

  16.       mMakeTextToast(getResources().getText(R.string.str_msg2).toString(),  

  17.           false);  

  18.       break;  

  19.   }  

  20.   super.setRequestedOrientation(requestedOrientation);  

  21. }  


7.获取屏幕显示状态 

Java代码  收藏代码

  1. @Override  

  2. public int getRequestedOrientation()  

  3. {  

  4.   // TODO Auto-generated method stub  

  5.   

  6.   /* 此重写getRequestedOrientation方法,可取得当下屏幕的方向 */  

  7.   return super.getRequestedOrientation();  

  8. }  


8.通过一个Toast来显示屏幕状态 

Java代码  收藏代码

  1. public void mMakeTextToast(String str, boolean isLong)  

  2.  {  

  3.    if (isLong == true)  

  4.    {  

  5.      Toast.makeText(EX05_22.this, str, Toast.LENGTH_LONG).show();  

  6.    } else  

  7.    {  

  8.      Toast.makeText(EX05_22.this, str, Toast.LENGTH_SHORT).show();  

  9.    }  

  10.  }  


9.colors.xml文件内容: 

Java代码  收藏代码

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

  2. <resources>  

  3.   <drawable name="darkgray">#808080</drawable>  

  4.   <drawable name="white">#FFFFFF</drawable>  

  5.   <drawable name="blue">#0000FF</drawable>  

  6. </resources>  


10.strings.xml文件内容如下: 

Java代码  收藏代码

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

  2. <resources>  

  3.     <string name="hello">Hello World, ScreenChangeEx</string>  

  4.     <string name="app_name"> ScreenChangeEx </string>  

  5.     <string name="str_button1">按我旋转屏幕</string>  

  6.     <string name="str_err_1001">  

  7.         请在AndroidManifest.xml\n添加android:screenOrientation属性  </string>  

  8.     <string name="str_msg1">旋转为LANDSCAPE</string>  

  9.     <string name="str_msg2">旋转为PORTRAIT</string>  

  10. </resources>  


11.AndroidManifest.xml文件内容: 

Java代码  收藏代码

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

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

  3.     package="cn.com" android:versionCode="1" android:versionName="1.0.0">  

  4.     <application android:icon="@drawable/icon" android:label="@string/app_name">  

  5.         <activity android:name=".ActivityMain" android:label="@string/app_name"  

  6.             android:screenOrientation="landscape">  

  7.             <intent-filter>  

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

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

  10.             </intent-filter>  

  11.         </activity>  

  12.     </application>  

  13. </manifest>   


9.程序整个ActivityMain.java文件如下: 

Java代码  收藏代码

  1. package cn.com;  

  2.   

  3. import android.app.Activity;  

  4. import android.content.pm.ActivityInfo;  

  5. import android.os.Bundle;  

  6. import android.view.View;  

  7. import android.view.Window;  

  8. import android.view.WindowManager;  

  9. import android.widget.Button;  

  10. import android.widget.TextView;  

  11. import android.widget.Toast;  

  12.   

  13. public class ActivityMain extends Activity  

  14. {  

  15.   private TextView mTextView01;  

  16.   private Button mButton01;  

  17.   

  18.   /** Called when the activity is first created. */  

  19.   @Override  

  20.   public void onCreate(Bundle savedInstanceState)  

  21.   {  

  22.     super.onCreate(savedInstanceState);  

  23.   

  24.     // 设置为无标题栏  

  25.     requestWindowFeature(Window.FEATURE_NO_TITLE);  

  26.   

  27.     // 设置为全屏模式  

  28.     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  

  29.         WindowManager.LayoutParams.FLAG_FULLSCREEN);  

  30.     setContentView(R.layout.main);  

  31.   

  32.     mButton01 = (Button) findViewById(R.id.myButton1);  

  33.     mTextView01 = (TextView) findViewById(R.id.myTextView1);  

  34.   

  35.     // Return the current requested orientation of the activity  

  36.     if (getRequestedOrientation() == -1)  

  37.     {  

  38.       mTextView01.setText(getResources().getText(R.string.str_err_1001));  

  39.     }  

  40.   

  41.     /* 当点击按钮旋转屏幕画面 */  

  42.     mButton01.setOnClickListener(new Button.OnClickListener()  

  43.     {  

  44.       // @Override  

  45.       public void onClick(View arg0)  

  46.       {  

  47.         /* 方法一:重写getRequestedOrientation */  

  48.   

  49.         /* 若无法取得screenOrientation属性 */  

  50.         if (getRequestedOrientation() == -1)  

  51.         {  

  52.           /* 提示无法进行画面旋转功能,因无法判别Orientation */  

  53.           mTextView01.setText(getResources().getText(R.string.str_err_1001));  

  54.         } else  

  55.         {  

  56.           if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)  

  57.           {  

  58.             /* 若当下为横排,则更改为竖排呈现 */  

  59.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  

  60.           } else if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)  

  61.           {  

  62.             /* 若当下为竖排,则更改为横排呈现 */  

  63.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  

  64.           }  

  65.         }  

  66.       }  

  67.     });  

  68.   }  

  69.   

  70.   @Override  

  71.   public void setRequestedOrientation(int requestedOrientation)  

  72.   {  

  73.     // TODO Auto-generated method stub  

  74.   

  75.     /* 判断要更改的方向,以Toast提示 */  

  76.     switch (requestedOrientation)  

  77.     {  

  78.       /* 更改为LANDSCAPE */  

  79.       case (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE):  

  80.         mMakeTextToast(getResources().getText(R.string.str_msg1).toString(),  

  81.             false);  

  82.         break;  

  83.       /* 更改为PORTRAIT */  

  84.       case (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT):  

  85.         mMakeTextToast(getResources().getText(R.string.str_msg2).toString(),  

  86.             false);  

  87.         break;  

  88.     }  

  89.     super.setRequestedOrientation(requestedOrientation);  

  90.   }  

  91.   

  92.   @Override  

  93.   public int getRequestedOrientation()  

  94.   {  

  95.     // TODO Auto-generated method stub  

  96.   

  97.     /* 此重写getRequestedOrientation方法,可取得当下屏幕的方向 */  

  98.     return super.getRequestedOrientation();  

  99.   }  

  100.   

  101.   public void mMakeTextToast(String str, boolean isLong)  

  102.   {  

  103.     if (isLong == true)  

  104.     {  

  105.       Toast.makeText(EX05_22.this, str, Toast.LENGTH_LONG).show();  

  106.     } else  

  107.     {  

  108.       Toast.makeText(EX05_22.this, str, Toast.LENGTH_SHORT).show();  

  109.     }  

  110.   }  

  111. }  


你可能感兴趣的:(横、竖屏幕动态切换(layout-land 和layout-port))