五、全屏与非全屏:
大家都知道,一般一个Activity设置全屏的方法有两种,一是在OnCreate中:
1 @Override
2 public void onCreate(Bundle icicle) {
3 super.onCreate(icicle);
4
5 requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);10 setContentView(R.layout.mylayout);
11
12
13
二是在AndroidManifest.xml中:
1<activity android:name=".MyActivity"
2 android:label=""
3 android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
然而,这两种方法都不能达到我们在视频播放过程中设置全屏与否的目的。因为它们都只能在初始化的时候决定全屏与否。那么我现在要说的就是第三种方法:
1getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
1getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
这种方法就可以在Activity运行过程中,动态地改变全屏与否。
横屏
@Override protected void onResume() { /** * 设置为横屏 */ if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } super.onResume(); }
android:launchMode="singleTask" android:screenOrientation="portrait">
如果只是简单的界面调整,我们可以阻止此问题的发生,屏幕旋转而自己调整屏幕的元素重构。
首先我们需要修改AndroidManifest.xml文件:
<activity android:name=".Magazine">
</activity>
//修改为:
<activity android:name=".Magazine"
android:configChanges="orientation|keyboard">
</activity>
这样是让程序能够响应旋转屏幕的事件。
然后重写onConfigurationChanged方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
Log.v(" == onConfigurationChanged");
processLayout();
}
<manifest xmlns:android=" http://schemas.android.com/apk/res/android"
package="com.demo"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".DemoGPS"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="com.google.android.maps" />
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
</manifest>
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
{
//land
}
else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
//port
}
}
android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "sensor" | "nonsensor"]screenOrientation 用来指定Activity的在设备上显示的方向,每个值代表如下含义:
"unspecified " | 默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向. |
"landscape " | 横屏显示(宽比高要长) |
"portrait " | 竖屏显示(高比宽要长) |
"user " | 用户当前首选的方向 |
"behind " | 和该Activity下面的那个Activity的方向一致(在Activity堆栈中的) |
"sensor " | 有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。 |
"nosensor " | 忽略物理感应器,这样就不会随着用户旋转设备而更改了 ( "unspecified "设置除外 )。 |