ご覧のとおり、「Got It」ボタンはナビゲーションバーの後ろにあります。修正できません!!!私が試してみました
<item name="Android:fitsSystemWindows">true</item>
レイアウトファイルで設定するだけでなく。
value-21の私のテーマは:
<style name="AppTheme" parent="Android:Theme.Material.Light.NoActionBar">
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowActionBar">false</item>
<item name="Android:windowFullscreen">false</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:fitsSystemWindows">true</item>
</style>
アプリケーション全体のすべての画面で同じケース。
助けてください。
これが解決策です。
Value-21 style.xmlにこれらのプロパティを追加することで、ほとんどのレイアウトが解決されます
<item name="Android:windowTranslucentStatus">true</item>
<item name="Android:windowTranslucentNavigation">true</item>
<item name="Android:fitsSystemWindows">true</item>
他の人のために、ナビゲーションバーの高さを計算し、ビューにマージンを追加しました。
public static int getSoftButtonsBarSizePort(Activity activity) {
// getRealMetrics is only available with API 17 and +
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int usableHeight = metrics.heightPixels;
activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
int realHeight = metrics.heightPixels;
if (realHeight > usableHeight)
return realHeight - usableHeight;
else
return 0;
}
return 0;
}
注:上記のソリューションを使用することですべてが機能しますが、アプリでPopupWindowも使用していました。PopupWindowのレイアウトはAndroid L.問題と解決策を探してください こちら
Niceユーザーエクスペリエンスの場合、Android:windowTranslucentNavigation
を使用してナビゲーションキー領域をブロックする必要はありません。
むしろこちらがより良いソリューションです。ResideMenuライブラリを使用している場合は、このメソッドをResideMenu.Javaに追加するだけです
@Override
protected boolean fitSystemWindows(Rect insets) {
int bottomPadding = insets.bottom;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "Android");
if (resourceId > 0) {
bottomPadding += resources.getDimensionPixelSize(resourceId);
}
}
this.setPadding(viewActivity.getPaddingLeft() + insets.left, viewActivity.getPaddingTop() + insets.top,
viewActivity.getPaddingRight() + insets.right, viewActivity.getPaddingBottom() + bottomPadding);
insets.left = insets.top = insets.right = insets.bottom = 0;
return true;
}
SlidingMenu
ライブラリを使用している場合は、modをSLIDING_CONTENT
に変更します。
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
それがあなたの時間を節約することを願っています
とても簡単です。親のレイアウトxmlに次の行を追加するだけです:
Android:fitsSystemWindows="true"
Activity
のonCreateメソッドでこのコードを使用します(BaseActivity
がある場合は、すべてのアクティビティがこれを適用するようにそこで実行できます):
ViewCompat.setOnApplyWindowInsetsListener(
findViewById(Android.R.id.content), (v, insets) -> {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
params.bottomMargin = insets.getSystemWindowInsetBottom();
return insets.consumeSystemWindowInsets();
});
レイアウトにこのフラグがある場合、このレイアウトはシステムにウィンドウのインセットを適用するように求めていることを意味します。つまり、FrameLayoutは、ステータスバーの高さに等しいパディングを適用することを望んでいます。
コンテンツビューの設定中に、アクティビティのonCreate()でこれを設定するだけです。
int mScreenWidth = getWindowManager().getDefaultDisplay().getWidth();
int mScreenHeight = getWindowManager().getDefaultDisplay().getHeight();
View view = getLayoutInflater().inflate(R.layout.activity_main, null);
setContentView(view, new ViewGroup.LayoutParams(mScreenWidth, mScreenHeight));
softInputMode
のpopupWindow
をSOFT_INPUT_ADJUST_RESIZE
に設定すると、問題が解決します。