web-dev-qa-db-ja.com

アプリケーションのコンテンツはAndroid L

enter image description here

ご覧のとおり、「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>

アプリケーション全体のすべての画面で同じケース。

助けてください。

23
nitesh goel

これが解決策です。

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.問題と解決策を探してください こちら

32
nitesh goel

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);

それがあなたの時間を節約することを願っています

6
Farhan

とても簡単です。親のレイアウトxmlに次の行を追加するだけです:

Android:fitsSystemWindows="true"
3
matin ashtiani

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は、ステータスバーの高さに等しいパディングを適用することを望んでいます。

2
Morteza Rastgoo

コンテンツビューの設定中に、アクティビティの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));
1
Digvesh

softInputModepopupWindowSOFT_INPUT_ADJUST_RESIZEに設定すると、問題が解決します。

0
Shilpi