it-roy-ru.com

контент приложения идет за панелью навигации в Android L

enter image description here

Как вы можете видеть, моя кнопка «Got It» находится за панелью навигации. Не могу это исправить !!! я пытался 

<item name="Android:fitsSystemWindows">true</item>  

А также установка его в файле макета.

моя тема в значении 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>

Это тот же случай со всеми экранами по всему приложению.

Пожалуйста помоги.

22
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. Ищите проблему и решение здесь

28
nitesh goel

Для удобства пользователей вам не нужно блокировать область клавиш навигации с помощью 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, измените мод на SLIDING_CONTENT:

menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);

Надеюсь, это сэкономит ваше время

5
Farhan

Это так просто, Просто добавьте эту строку в ваш родительский макет xml:

Android:fitsSystemWindows="true"

2
matin ashtiani

Просто установите это в 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

Установка softInputMode для popupWindow в SOFT_INPUT_ADJUST_RESIZE решает проблему.

0
Shilpi

Используйте этот код в методе onCreate вашей Activity (если у вас есть 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 желает применить отступ, равный высоте строки состояния.

0
Morteza Rastgoo