Рисование снэк-бара MaterialComponents под строкой состояния, хотя я определяю для нее правильные поля - PullRequest
0 голосов
/ 15 мая 2019

В настоящее время я внедряю снэк-панель MaterialComponents в свое приложение, и когда я начал использовать

(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)

, снэк-панель начала рисовать за панелью навигации.Обычно это не должно быть проблемой, так как я просто использовал бы код для определения поля на Снэк-панели, включая высоту панели навигации, но, тем не менее, он не применяется и остается таким:

enter image description here

Код, который я использовал для определения поля, выглядит следующим образом:

final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) snackBarView.getLayoutParams();
            params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin + ThemeUtils.getNavigationBarHeight(this));

            snackBarView.setLayoutParams(params);

Кто-нибудь видит ошибку, которую я делаю?Любая помощь в исправлении этого будет очень цениться!Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Мое решение теперь заключается в добавлении ConstraintLayout в мой макет, на котором я устанавливаю поля, которые соответствуют панели навигации.Затем я установил Snackbar в этот новый ConstraintLayout.Довольно хакерский, но, ну, лучше, чем вообще не работать ...

0 голосов
/ 15 мая 2019

Вот моя реализация Snackbar с FLAG_LAYOUT_NO_LIMITS, и она отлично работает.

Snackbar snackbar = Snackbar.make(coordinatorLayout, "Doing good...", Snackbar.LENGTH_LONG);
                View snackBarView = snackbar.getView();
                final ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) snackBarView.getLayoutParams();
                params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin + getNavigationBarHeight());

                snackBarView.setLayoutParams(params);
                TextView tv = snackBarView.findViewById(android.support.design.R.id.snackbar_text);
                tv.setTextColor(Color.YELLOW);
                snackBarView.setBackgroundColor(Color.BLACK);
                snackbar.show();

Где мой getNavigationBarHeight ():

public int getNavigationBarHeight() {
        int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
        if (resourceId > 0) {
            Toast.makeText(this, "nav bar height: " + getResources().getDimensionPixelSize(resourceId), Toast.LENGTH_SHORT).show();
            return getResources().getDimensionPixelSize(resourceId);
        }
        return 0;
    }
...