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

首頁 > 系統(tǒng) > Android > 正文

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

2019-12-12 00:39:52
字體:
供稿:網(wǎng)友

最近項(xiàng)目進(jìn)行適配的時(shí)候發(fā)現(xiàn)部分(如華為手機(jī))存在底部虛擬按鍵的手機(jī)會(huì)因?yàn)樘摂M按鍵的存在導(dǎo)致?lián)踝〔糠纸缑妫驗(yàn)樾枰溜@示,故調(diào)用虛擬按鍵隱藏方法使之隱藏,然而發(fā)現(xiàn)出現(xiàn)如下問題:

手動(dòng)操作隱藏虛擬按鍵后出現(xiàn)長(zhǎng)白條區(qū)域

不自動(dòng)隱藏

滑出狀態(tài)欄后虛擬按鍵也出來,狀態(tài)欄隱藏后虛擬卻不跟著隱藏

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

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

每次進(jìn)入界面時(shí)虛擬按鍵自動(dòng)隱藏

手動(dòng)滑出虛擬按鍵,當(dāng)不操作屏幕時(shí)定時(shí)自動(dòng)隱藏

當(dāng)滑出狀態(tài)欄時(shí)虛擬按鍵會(huì)跟著出來,也要處理讓其和狀態(tài)欄在不操作時(shí)自動(dòng)隱藏

具體代碼如下操作:

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() {  //調(diào)用配置  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;  //判斷當(dāng)前版本在4.0以上并且存在虛擬按鍵,否則不做操作  if (Build.VERSION.SDK_INT < 19 || !checkDeviceHasNavigationBar()) {  //一定要判斷是否存在按鍵,否則在沒有按鍵的手機(jī)調(diào)用會(huì)影響別的功能。如之前沒有考慮到,導(dǎo)致圖傳全屏變成小屏顯示。   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; }

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

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

以上這篇Android適配底部虛擬按鍵的方法詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 道孚县| 琼结县| 扎鲁特旗| 普陀区| 夏邑县| 沾化县| 清涧县| 清苑县| 化德县| 伊宁市| 海口市| 临高县| 高淳县| 清苑县| 金秀| 莱阳市| 宝坻区| 梁河县| 颍上县| 马关县| 东丰县| 钟山县| 南投县| 田东县| 西青区| 沛县| 遂平县| 宁陕县| 通海县| 读书| 颍上县| 舒兰市| 滨海县| 图们市| 慈溪市| 木兰县| 墨竹工卡县| 华亭县| 绵竹市| 开江县| 徐汇区|