最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年07月28日 13:16:26   作者:yuanzhihui123  
今天小編就為大家分享一篇Android適配底部虛擬按鍵的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

不自動隱藏

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

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

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

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

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

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

具體代碼如下操作:

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)用會影響別的功能。如之前沒有考慮到,導(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;
 }

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

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

以上這篇Android適配底部虛擬按鍵的方法詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

玉溪市| 三穗县| 淮北市| 梁河县| 通辽市| 永城市| 四川省| 克山县| 波密县| 如东县| 宜兴市| 济南市| 西乌珠穆沁旗| 竹山县| 太白县| 黄平县| 江门市| 天门市| 项城市| 灯塔市| 吉隆县| 子长县| 布尔津县| 凉城县| 日喀则市| 肃北| 教育| 吉隆县| 洪湖市| 常州市| 炎陵县| 嘉祥县| 永年县| 攀枝花市| 麻江县| 龙门县| 罗山县| 阳高县| 随州市| 元谋县| 太和县|