Android设置全屏显示
设置全屏一般常用的方法有2种。
一,在AndriodManifest.xml文件中设置
看需求可以设置Activity的theme 或者application 的theme
android:theme=”@android:style/Theme.Light.NoTitleBar.Fullscreen”
如果在Application中加入这句话的话,意味着你对该app下所有的Activity都设置全屏
也可以自定义在res文件夹的values文件夹下有一个styles.xml文件 定义一个
```
Theme.AppSetFullScreenTheme
<style name="Theme.AppSetFullScreenTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@mipmap/openshow</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
```
然后我们就可以使用这个Theme了
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme=”@android:style/Theme.AppSetFullScreenTheme”">
二,在代码里面设置
首先也是最重要的一点设置全屏的方法需要些在setContentView方法之前
requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
设置进入全屏,取消全屏
用一个工具类CommonUtil 设置隐藏标题栏、设置全屏,取消全屏把方法封装起来
在需要使用时吧Activity本身作为参数传递进去调用方法就OK.
import android.app.Activity;
import android.view.Window;
import android.view.WindowManager;
public class CommonUtil {
/**
* 设置隐藏标题栏
*
* @param activity
*/
public static void setNoTitleBar(Activity activity) {
activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
}
/**
* 设置全屏
*
* @param activity
*/
public static void setFullScreen(Activity activity) {
activity.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
/**
* 取消全屏
*
* @param activity
*/
public static void cancelFullScreen(Activity activity) {
activity.getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
全屏非全屏切换问题
一,全屏界面切换到非全屏界面问题
从一个全屏界面切换到一个非全屏界面,如果处理的不好很容易产生界面抖动
主要是在切换换的过程中,会先出现界面内容,然后由于状态栏的出现导致界面下移
第一种方法
全屏界面是刚进入的时候设置了全屏,没了状态栏,进入非全屏,状态栏肯定要显示,于是乎就发生了抖动的现 象,这里采用的就是跳转之前退出全屏,这就才能保证状态栏不抖动。
在全屏界面设置如下
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
在切换到非全屏界面之前执行该操作
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
第二种方法
第一种方法不算完美至是在非全屏界面的抖动转移到全屏界面了。
第二种做法是在非全屏界面采用状态栏占位的方式也。改方法在setContentView方法之后执行。
/**
* 状态栏处理:解决全屏切换非全屏页面被压缩问题
*/
public void initStatusBar(int barColor) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
// 获取状态栏高度
int statusBarHeight = getResources().getDimensionPixelSize(resourceId);
View rectView = new View(this);
// 绘制一个和状态栏一样高的矩形,并添加到视图中
LinearLayout.LayoutParams params
= new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);
rectView.setLayoutParams(params);
//设置状态栏颜色
rectView.setBackgroundColor(getResources().getColor(barColor));
// 添加矩形View到布局中
ViewGroup decorView = (ViewGroup) getWindow().getDecorView();
decorView.addView(rectView);
ViewGroup rootView = (ViewGroup) ((ViewGroup) this.findViewById(android.R.id.content)).getChildAt(0);
rootView.setFitsSystemWindows(true);
rootView.setClipToPadding(true);
}
}
第三种方法
全屏界面设置style
<style name="Theme.AppSetFullScreenTheme" parent="Theme.AppCompat.Light"><item name="colorPrimary">@color/ActivityMainColor></item>
<item name="colorPrimaryDark">@color/ActivityMainColor></item>
<item name="colorAccent">@color/ActivityMainColor></item>
<item name="android:windowNoTitle">true></item>
<item name="android:buttonStyle">?android:attr/borderlessButtonStyle></item>
<item name="android:colorBackgroundCacheHint">@null></item>
</style>
然后在setContentView方法之前设置
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 、WindowManager.LayoutParams.FLAG_FULLSCREEN);
然后在非全屏界面setContentView方法之前调用
//平滑切换全屏方法
public void smoothSwitchScreen() {
// 5.0以上修复了此bug
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
ViewGroup rootView = ((ViewGroup) this.findViewById(android.R.id.content));
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
int statusBarHeight = getResources().getDimensionPixelSize(resourceId);
rootView.setPadding(0, statusBarHeight, 0, 0);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
}