美文网首页
Android全屏与非全屏问题

Android全屏与非全屏问题

作者: 江南皮皮 | 来源:发表于2018-06-29 17:58 被阅读0次

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

    }

    }

    相关文章

      网友评论

          本文标题:Android全屏与非全屏问题

          本文链接:https://www.haomeiwen.com/subject/asaayftx.html