国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android適配底部虛擬按鍵的方法詳解

2019-10-21 21:45:03
字體:
來源:轉載
供稿:網友

最近項目進行適配的時候發現部分(如華為手機)存在底部虛擬按鍵的手機會因為虛擬按鍵的存在導致擋住部分界面,因為需要全屏顯示,故調用虛擬按鍵隱藏方法使之隱藏,然而發現出現如下問題:

手動操作隱藏虛擬按鍵后出現長白條區域

不自動隱藏

滑出狀態欄后虛擬按鍵也出來,狀態欄隱藏后虛擬卻不跟著隱藏

在沒有虛擬按鍵的設備上影響了SurfaceView全屏顯示圖傳(原本全屏顯示的圖傳在切出去再進來時變成了小屏顯示)

通過google了很多方法并嘗試終于解決了這個問題,達到如下效果:

每次進入界面時虛擬按鍵自動隱藏

手動滑出虛擬按鍵,當不操作屏幕時定時自動隱藏

當滑出狀態欄時虛擬按鍵會跟著出來,也要處理讓其和狀態欄在不操作時自動隱藏

具體代碼如下操作:

public class TestActivity extends AppCompatActivity { private View decorView; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_test);  //獲取頂層視圖  decorView = getWindow().getDecorView(); } @Override protected void onStart() {  //調用配置  init();  super.onStart(); } private void init(){  int flag = 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 // hide    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;  //判斷當前版本在4.0以上并且存在虛擬按鍵,否則不做操作  if (Build.VERSION.SDK_INT < 19 || !checkDeviceHasNavigationBar()) {  //一定要判斷是否存在按鍵,否則在沒有按鍵的手機調用會影響別的功能。如之前沒有考慮到,導致圖傳全屏變成小屏顯示。   return;  } else {   // 獲取屬性   decorView.setSystemUiVisibility(flag);  } } /**  * 判斷是否存在虛擬按鍵  * @return  */ public boolean checkDeviceHasNavigationBar() {  boolean hasNavigationBar = false;  Resources rs = getResources();  int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");  if (id > 0) {   hasNavigationBar = rs.getBoolean(id);  }  try {   Class<?> systemPropertiesClass = Class.forName("android.os.SystemProperties");   Method m = systemPropertiesClass.getMethod("get", String.class);   String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");   if ("1".equals(navBarOverride)) {    hasNavigationBar = false;   } else if ("0".equals(navBarOverride)) {    hasNavigationBar = true;   }  } catch (Exception e) {  }  return hasNavigationBar; } @Override public boolean onTouch(View v, MotionEvent event) {  return false; }

注:有些時候要手動去調用上述代碼中init()配置方法隱藏按鍵。如彈出dialog時虛擬按鍵會出來,此時要手動調用隱藏,還有彈出鍵盤等等。

記錄一下,以后遇到此類問題可供參考。

以上這篇Android適配底部虛擬按鍵的方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新龙县| 鹰潭市| 全州县| 辛集市| 当阳市| 靖西县| 恩施市| 中阳县| 武强县| 富蕴县| 商丘市| 雅江县| 若尔盖县| 清水县| 古丈县| 定陶县| 鸡东县| 平凉市| 德令哈市| 台江县| 论坛| 博湖县| 龙陵县| 克拉玛依市| 团风县| 卓资县| 周口市| 中西区| 通渭县| 含山县| 桃源县| 文成县| 古蔺县| 邹平县| 皮山县| 新泰市| 新余市| 枞阳县| 雷波县| 莱阳市| 翼城县|