全屏模式下不能下拉 上滑(mtk)

项目需求:在全屏模式下不能显示状态栏/虚拟按键

说白点:全屏模式下不能下拉

因为是在MTK平台研发,离不开源码。。。。


这里不做逻辑解释:


参照网上大神说法:MTK 内部已经开发提供新的接口来实现全屏界面禁止下拉状态栏

4.4平台上的做法:

1. frameworks\base\core\java\android\view\View.java上

  1. +    /** 
  2. +     * @hide 
  3. +     * 
  4. +     * NOTE: Flag for {@link #setSystemUiVisibility(int)}: It help user to disable transient 
  5. +     * status bar triggered by gesture 
  6. +     */  
  7. +    public static final int SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED = 0x00002000;

2. frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java

  1.         mSystemGestures = new SystemGesturesPointerEventListener(context,  
  2.                 new SystemGesturesPointerEventListener.Callbacks() {  
  3.                     @Override  
  4.                     public void onSwipeFromTop() {  
  5. +                        if (isGestureIsolated())  
  6. +                            return;  
  7.                         if (mStatusBar != null) {  
  8.                             requestTransientBars(mStatusBar);  
  9.                         }  
  10.                     }  
  11.                     @Override  
  12.                     public void onSwipeFromBottom() {  
  13. +                        if (isGestureIsolated())  
  14. +                            return;  
  15.                         if (mNavigationBar != null && mNavigationBarOnBottom) {  
  16.                             requestTransientBars(mNavigationBar);  
  17.                         }  
  18.                     }  
  19.                     @Override  
  20.                     public void onSwipeFromRight() {  
  21. +                        if (isGestureIsolated())  
  22. +                            return;                     
  23.                         if (mNavigationBar != null && !mNavigationBarOnBottom) {  
  24.                             requestTransientBars(mNavigationBar);  
  25.                         }  
  26.                     }  
  27.                     @Override  
  28.                     public void onDebug() {  
  29.                         // no-op  
  30.                     }  
  31. +                    private boolean isGestureIsolated() {  
  32. +                        WindowState win = mFocusedWindow != null ? mFocusedWindow : mTopFullscreenOpaqueWindowState;  
  33. +                        if (win != null && (win.getSystemUiVisibility() & View.SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED) != 0)  
  34. +                            return true;  
  35. +                        else  
  36. +                            return false;  
  37. +                    }  
  38.                 }); 

对比了一下6.0版本:区别不大


在6.0上就是修改了SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED的变量值:


    /**
     * @hide
     *
     * NOTE: Flag for {@link #setSystemUiVisibility(int)}: It help user to disable transient
     * status bar triggered by gesture
     */
    public static final int SYSTEM_UI_FLAG_IMMERSIVE_GESTURE_ISOLATED = 0x00004000;


使用方法:

Demo:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if( hasFocus ) {
            ScreenFull();
        }
    }
    private void ScreenFull() {
        // TODO Auto-generated method stub
        final View decorView = getWindow().getDecorView();
        final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                | 0x00004000;                               //SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
        decorView.setSystemUiVisibility(flags);

        decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                    decorView.setSystemUiVisibility(flags);
                }
            }
        });
    }
}

20171102 使用测试发现一个问题:全屏模式下 配置该属性 导致需要按2下Home才能退出到桌面

因而 
SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
该属性,存在的Bug暂时不去处理

针对该问题做出如下修改:(看图 不说话)




测试完美解决:







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿成长

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值