2017-09-16 47 views
0

我試圖找到Android中的軟按鈕欄的位置(而不是硬件背部,菜單等按鈕,它們顯示在屏幕上)。是否可以在Android中找到軟按鈕欄的位置?

我知道如何與東西​​得到實際的窗口大小以像素爲單位像

Display d = getWindowManager().getDefaultDisplay(); 
DisplayMetrics realDisplayMetrics = new DisplayMetrics(); 
DisplayMetrics displayMetrics = new DisplayMetrics(); 

d.getRealMetrics(realDisplayMetrics); 
d.getMetrics(displayMetrics); 

...然後看看是否有「真正的」顯示指標比較「常規」顯示指標。 因此,我知道軟按鈕欄是處於水平還是垂直位置(以及它有多少像素),但我不知道它是在左邊還是在右邊。

任何想法如何檢索?

編輯:代碼的上下文在一個Activity內(如問題所述)。

+0

你是在一個活動? – ianhanniballake

+0

是的,我正在進行一項活動 – Panayotis

+0

在我的像素xl(8.0)上,導航欄始終位於手機的物理底部。通過一些挖掘,你可以看到這是否設備/版本一致,然後使用['activity.getRequestedOrientation()'](https://developer.android.com/reference/android/app/Activity.html# getRequestedOrientation())解密物理底部是最左邊還是最右邊。 – MeetTitan

回答

2

系統窗口(例如狀態欄和導航欄)的唯一可靠指示器是通過使用系統窗口插槽,如Why would I want to fitsSystemWindows blog post中所述。

到21 API之前,這要求你的活動你的根視圖是你到哪兒去覆蓋fitsSystemWindows()一個子類 - 傳遞給你的Rect告訴你哪個側面和在什麼尺寸狀態欄/導航欄(取決於您在活動中設置的標誌)。

然而,在API 21+,可以改爲做到這一點,而無需創建一個自定義視圖使用ViewCompat.setOnApplyWindowInsetsListener

ViewCompat.setOnApplyWindowInsetsListener(yourRootView, 
    new OnApplyWindowInsetsListener() { 
     @Override 
     public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { 
     // Use insets.getSystemWindowInsetBottom(), etc to extract 
     // the size and location of the system windows 
     return ViewCompat.onApplyWindowInsets(v, insets); 
     } 
    }); 
相關問題