这个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);
}
});
}
}