如何实现导航栏上划显示,触摸隐藏,扫码枪也不能使其展示
简介
公司最近在做零售相关的业务,其中不需要使用软键盘,同时还需要隐藏导航栏,
但是可以上划展示导航栏,一半这种展示时间大约是4s,就自动缩回去了,这个可是一个非常头痛的需求你
第一步
将AndroidManifest.xml中的设置默认的软键盘不显示属性 android:windowSoftInputMode="stateHidden|stateAlwaysHidden"
第二步
需要设置状态栏的动态显示,首先给一个直接代码
public static void hideSystemUI(View decorView) {
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_IMMERSIVE
);
}
这个是控制导航栏动态显示的核心代码
但是该怎么使用呢? 我们需要在BaseActivity中两处设置这个控制代码,一个是Activity创建,二个是全局的焦点控制
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
mView = getWindow().getDecorView();
PackageUtils.hideSystemUI(mView);
setContentView(getLayoutId());
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
PackageUtils.hideSystemUI(getWindow().getDecorView());
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
AutoSizeCompat.autoConvertDensityBaseOnHeight(getResources(),1080);
}
}
getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 这个是用来设置扫码枪扫码防止出现软件盘的核心方法 以上做完之后,你会发现你的Activity是不会出现闪烁了,那么对话框应该怎么操作呢 同样的也是控制窗体焦点,我的写法如下
@Override
public void show() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
super.show();
}
这个是重写show方法,让整个窗体不具备焦点,这样就没有问题了,这个操作不会影响Edtext 对焦点的获取,还是很完美的,希望对大家有所帮助吧
|