Как динамически определить высоту AppBarLayout в соответствии с ключевыми линиями Material Ratio

Обычно я определяю высоту AppBarLayout как фиксированную dp в макете xml. Например;

<android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/detail_backdrop_height" />

Когда я узнаю больше о дизайне материалов Google, я постепенно понял, что он имеет абсолютное соотношение для определения ширины и высоты (размера) AppBarLayout, как показано на следующем рисунке.

Чтобы следовать этим соотношениям сторон, высота AppBarLayout должна быть изменена в соответствии с разной шириной экрана физического мобильного устройства.

Поэтому я хотел бы знать, как мне динамически определять высоту AppBarLayout и где я должен определять эту логику определения отношения (я имею в виду, в каком методе callback класса Activity java).

Матрицы ключевых линий для AppBarLayout


person Steve.NayLinAung    schedule 09.12.2016    source источник
comment
Я также столкнулся с такой же проблемой. Я бы посоветовал вам определить высоту и ширину в соответствии с размером экрана. Предположим, на вашем текущем экране ваша верхняя часть покрывает 50% экрана, а средняя часть покрывает 20%, а нижняя часть покрывает 30%, тогда вы можете создать высоту и ширину для каждого экрана и установить это соответствующим образом. Попробуйте это, это может сработать для вас.   -  person Deepak Sachdeva    schedule 09.12.2016


Ответы (1)


вы можете получить ширину и высоту экрана, используя приведенный ниже код

DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int width = displaymetrics.widthPixels;

рассчитать высоту макета панели приложения, используя приведенную ниже формулу

int appbar_height = width/1.5;

затем установите высоту Appbar с помощью

AppBarLayout.LayoutParams layoutParams=new AppBarLayout.LayoutParams(AppBarLayout.LayoutParams.MATCH_PARENT,appbar_height);
AppBarLayout appBarLayout = (AppBarLayout) rootView.findViewById(R.id.appbar);
appBarLayout.setLayoutParams(params);
person Rajesh.k    schedule 09.12.2016