展会信息港展会大全

如何改变Activity的显示方向
来源:互联网   发布日期:2016-01-14 10:54:26   浏览:2390次  

导读:本示例演示如何通过Activity了的setRequestedOrientation()方法来设定Activity的显示方向。本示例在Eclipse上编译测试。1. 定义清单文件(And...

本示例演示如何通过Activity了的setRequestedOrientation()方法来设定Activity的显示方向。

本示例在Eclipse上编译测试。

1.定义清单文件(AndroidManifest.xml)

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

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

package="my.android.test"

android:versionCode="1"

android:versionName="1.0">

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

<activity android:name=".ScreenOrientation"

android:label="@string/app_name">

<intent-filter>

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

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

</intent-filter>

</activity>

</application>

<uses-sdk android:minSdkVersion="9" />

</manifest>

2. 定义字符串资源(strings.xml)

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

<resources>

<string name="hello">Hello World, ScreenOrientation!</string>

<string name="app_name">ScreenOrientation</string>

<string name="screen_orientation_summary">Demonstrates the available screen

orientation modes.Often you want to set the desired mode in your manifest

instead of programmatically.</string>

<string name="screen_orientation">Screen Orientation</string>

</resources>

3. 定义数组资源(arrays.xml)

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

<resources>

<!-- 下列控件应用的数组资源 -->

<string-array name="screen_orientations">

<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>

</string-array>

</resources>

4. 定义布局资源(screen_orientation.xml)

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

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

android:orientation="vertical" android:padding="4dip"

android:gravity="center_horizontal"

android:layout_width="match_parent" android:layout_height="match_parent">

<TextView

android:layout_width="match_parent" android:layout_height="wrap_content"

android:layout_weight="0"

android:paddingBottom="4dip"

android:text="@string/screen_orientation_summary"/>

<Spinner android:id="@+id/orientation"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:drawSelectorOnTop="true"

android:prompt="@string/screen_orientation">

</Spinner>

</LinearLayout>

5. 创建Activity类(ScreenOrientation.java)

package my.android.test;

import android.app.Activity;

import android.content.pm.ActivityInfo;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

import android.widget.AdapterView.OnItemSelectedListener;

publicclass ScreenOrientation extends Activity {

//Activity中的调整列表。

Spinner mOrientation;

/**

* 设定Activity主窗口的方向,数组中的方向会设定给R.attr类中的screenOrientation属性,

* screenOrientation的属性值必须是以下常量值。

* ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED:

* 不指定方向,让系统决定Activity的最佳方向。

* ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:

* 希望Activity在横向屏上显示,也就是说横向的宽度要大于纵向的高度,并且忽略方向传感器的影响。

* ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:

* 希望Activity在纵向屏上显示,也就是说纵向的高度要大于横向的宽度,并且忽略方向传感器的影响。

* ActivityInfo.SCREEN_ORIENTATION_USER:

* 使用用户设备的当前首选方向。

* ActivityInfo.SCREEN_ORIENTATION_BEHIND:

* 始终保持与屏幕一致的方向,不管这个Activity在前台还是后台。

* ActivityInfo.SCREEN_ORIENTATION_SENSOR:

* Activity的方向由物理方向传感器来决定,按照用户旋转设备的方向来显示。

* ActivityInfo.SCREEN_ORIENTATION_NOSENSOR:

* 始终忽略方向传感器的判断,当用户旋转设备时,显示不跟着旋转。

* ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE:

* 希望Activity在横向屏幕上显示,但是可以根据方向传感器指示的方向来进行改变。

* ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:

* 希望Activity在纵向屏幕上显示,但是可以根据方向传感器指示的方向来进行改变。

* ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE:

* 希望Activity在横向屏幕上显示,但与正常的横向屏幕方向相反。

* ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT:

* 希望Activity在纵向屏幕上显示,但与正常的纵向屏幕方向相反

* ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR:

* Activity的方向由方向传感器来决定,显示会根据用户设备的移动情况来旋转。

*/

finalstaticintmOrientationValues[] = newint[]{

ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED,

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE,

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT,

ActivityInfo.SCREEN_ORIENTATION_USER,

ActivityInfo.SCREEN_ORIENTATION_BEHIND,

ActivityInfo.SCREEN_ORIENTATION_SENSOR,

ActivityInfo.SCREEN_ORIENTATION_NOSENSOR,

ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE,

ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT,

ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE,

ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT,

ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR,

};

/** 首次创建本Activity时,调用这个方法 */

@Override

publicvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//填充布局

setContentView(R.layout.screen_orientation);

//查找下拉控件

mOrientation = (Spinner)findViewById(R.id.orientation);

//引用数组资源,创建字符数组适配器

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,

R.array.screen_orientations,android.R.layout.simple_spinner_item);

//把数组适配器与下拉控件关联

mOrientation.setAdapter(adapter);

//给下拉控件设置时间监听器

mOrientation.setOnItemSelectedListener(

/**

* 列表项目选择监听器

* onItemSelected:有项目选择时要执行这个回调。

* onNothingSelected:没有选择任何项目时执行这个回调。

*/

new OnItemSelectedListener(){

publicvoid onItemSelected(AdapterView<?> parent, View view, int position, long id){

//设置Activity的方向选项

setRequestedOrientation(mOrientationValues[position]);

}

publicvoid onNothingSelected(AdapterView<?> parent){

//不特定指定方向

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

}

});

}

}

摘自 FireOfStar的专栏

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港