91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-09 05:26:12 來源:腳本之家 閱讀:612 作者:yuanzhihui123 欄目:移動開發

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

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

不自動隱藏

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

在沒有虛擬按鍵的設備上影響了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適配底部虛擬按鍵的方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石棉县| 定结县| 黄石市| 湘西| 布拖县| 珲春市| 买车| 虞城县| 休宁县| 乐亭县| 根河市| 清涧县| 顺昌县| 江西省| 温宿县| 兰考县| 西丰县| 六盘水市| 杭州市| 吉木乃县| 盐城市| 乐陵市| 青岛市| 普格县| 甘洛县| 巧家县| 新蔡县| 汝阳县| 扶余县| 安远县| 徐水县| 长阳| 南昌县| 建阳市| 新宾| 富民县| 吉水县| 汾阳市| 武清区| 永仁县| 老河口市|