一、AndroidManifest.xml对Activity屏幕的控制
1、显式指定屏幕方向--禁止自动切换 默认情况下,
Activity是自动切换方向的。可以通过在AndroidManifest.xml中增加Activity的以下属性,显式指定屏幕方 向,禁止自动切换:
//指定为横屏 android:screenOrientation="landscape"
//指定为竖屏 android:screenOrientation="portrait"
2、 不显示窗口标题栏 可以通过Theme来实现。
首先在res/values文件夹中,创建一个winStyle.xml文件,其内容如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="NoTitle" parent="android:Theme">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
然后,在AndroidManifest.xml文件中,为Activity增加如下属性: android:theme="@style/NoTitle"
二、 Java层对屏幕的控制
1、显式指定屏幕方向
//显式指定为竖屏
if(getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }
//显式指定为横屏
if(getRequestedOrientation()==ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
2、 不显示窗口标题栏. 在代码中加入如下语句即可。
requestWindowFeature(Window.FEATURE_NO_TITLE);
3、 全屏显示 在代码中加入如下语句即可。其实,这就是不显示系统状态栏(电量、信号强度等状态的显示区)。 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
注意: getRequestedOrientation、setRequestedOrientation、requestWindowFeature、getWindow都是Activity类的 方法。
三、避免屏幕方向切换时Activity重启
默认情况下,如果没显式指定Acitivity的屏幕方向,则会随着使用动态切换屏幕方向。如果不加设置,屏幕方向的切换会导致Activity的重启, 即会关掉Activity并重新创建一个,这将导致onDestroy、onCreate等事件的发生,因而,屏幕切换,可能会导致那些与 Activity状态相关的应用出错。例如,某个应用是在Activity的onCreate函数中创建的,则屏幕的切换会导致该程序被多次创建,这很可 能出错。 为了避免这一点,最简单的方法是,显示指定屏幕方向,禁止自动切换。但是,这又导致屏幕方向不够灵活。下面提供一种方法,避免Activity随着屏幕的 切换而重启。
首先在AndroidManifest.xml文件中,为Activity增加如下属性: android:configChanges="orientation|keyboardHidden"
然后在Activity类中重载onConfigurationChanged方法即可,
如下: @Override public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged(config); Log.i("FirstTest", "======onConfiguration}
这样,在屏幕切换时就不会多次创建新的Activity了,而是执行这个方法。
启动的时候是横屏的话就横屏表示,纵屏的话就纵屏表示,手机切换横竖屏不能用。
第一步:在Mainfest.xml中追加android:screenOrientation="sensor" android:configChanges="orientation|keyboardHidden"
第二步:取得屏幕的长和宽,进行比较设置横竖屏的变量。
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
if (width > height) {
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else {
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
第三步:在onConfigurationChanged()函数中追加this.setRequestedOrientation(mOrientation)就行了
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
this.setRequestedOrientation(mOrientation);
}
切到别的画面的时候再回到原画面,它就仍然是横的或者是纵的。想让它从别的屏幕回来后,又重新横竖屏布局,只要在OnResume()中在设定下就行了,但是这个只支持横竖屏只有一个layout的。