天天看点

Android Api Demos登顶之路(二十)Screen Orientation

这个Demo列举了所有屏幕方向的模式。 我们可发根据需要选择和设置屏幕的方向

本例使用下拉列表框进行显示

activity_main.xml布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/info" />

    <Spinner 
        android:id="@+id/screen_orientation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:drawSelectorOnTop="true"/>

</LinearLayout>
           

arrays.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string-array name="screen_orientation">
       <item >UNSPECIFIED</item>
       <item >LANDSCAPE</item>
       <item >PORTRAIT</item>
       <item >USER</item>
       <item >BEHIND</item>
       <item >SENSOR</item>
       <item >NOSENSOR</item>
       <item >SENSOR_LANDSCAPE</item>
       <item >SENSOR_PORTRAIT</item>
       <item >REVERSE_LANDSCAPE</item>
       <item >REVERSE_PORTRAIT</item>
       <item >FULL_SENSOR</item>
       <item >USER_LANDSCAPE</item>
       <item >USER_PORTRAIT</item>
       <item >FULL_USER</item>
       <item >LOCKED</item>
   </string-array> 
</resources>
           

MainActivity

public class MainActivity extends Activity {
    private Spinner mScreenOrentation;
    private static int[] mOrientationValues = new int[] {
            // 未指定,此为默认值,由Android系统自己选择适当的方向
            ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED,
            // 横屏
            ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE,
            // 坚屏
            ActivityInfo.SCREEN_ORIENTATION_PORTRAIT,
            // 用户当前的首选方向
            ActivityInfo.SCREEN_ORIENTATION_USER,
            // 继承Activity堆栈中当前Activity下面的那个Activity的方向
            ActivityInfo.SCREEN_ORIENTATION_BEHIND,
            // 由物理感应器决定显示方向,它取决于用户如何持有设备,
            ActivityInfo.SCREEN_ORIENTATION_SENSOR,
            // 忽略物理感应器——即显示方向与物理感应器无关,
            ActivityInfo.SCREEN_ORIENTATION_NOSENSOR,
            // 希望Activity在横向屏幕上显示,但是可以根据方向传感器指示的方向来进行改变
            ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE,
            ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT,
            // 希望Activity在横向屏幕上显示,但与正常的横向屏幕方向相反。
            ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE,
            ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT,
            // Activity的方向由方向传感器来决定,显示会根据用户设备的移动情况来旋转。
            ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR,
            // 希望Activity在横向屏幕上显示,但是可以根据用户指定的方向来进行改变
            ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE,
            ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT,
            // Activity的方向由方完全由用户来指定
            ActivityInfo.SCREEN_ORIENTATION_FULL_USER,
            // 锁定当前方向
            ActivityInfo.SCREEN_ORIENTATION_LOCKED };


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到下拉列表框
        mScreenOrentation = (Spinner) findViewById(R.id.screen_orientation);
        //从资源文件中创建一个适配器,所以要在资源文件中定义数据源。在values目录下新建arrays.xml
        //文件,在arrays文件中准备下拉列表框中要显示的内容
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.screen_orientation,
                android.R.layout.simple_spinner_item);
        //设置下拉列表项的布局文件,使用系统自带的布局文件
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mScreenOrentation.setAdapter(adapter);
        //设置选择监听
        mScreenOrentation.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                //向系统发送设置屏幕方向的请求
                setRequestedOrientation(mOrientationValues[position]);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
            }
        });
    }

}