横、竖屏幕动态切换(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))