setPeekHeight () в Java не дает такой же результат, как в XML - PullRequest
0 голосов
/ 28 октября 2018

Я работаю с Bottom Sheets в моем приложении.

<include
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        layout="@layout/layout_book"

        app:layout_behavior="@string/bottom_sheet_behavior"
        app:behavior_peekHeight="0dp"
        />

Это мой нижний лист, и когда я изменяю высоту просмотра с этого xml на 120dp, я получаю правильный вид.Но когда я пытаюсь сделать то же самое из Java, то я получаю другой результат, т.е. высота меньше, чем у XML.

bottomSheetBehavior.setPeekHeight(120);

В идеале это не должно быть так.Я понятия не имею по этому поводу.Спасибо.

1 Ответ

0 голосов
/ 28 октября 2018

setPeekHeight() (и многие другие методы, связанные с размером / размером) принимают значения pixel в качестве аргументов.Это означает, что вам нужно сначала преобразовать значение dp в px.Лучший способ сделать это - определить dimen значение ресурса и затем захватить его в коде:

<dimen name="peek_height">120dp</dimen>
int peekHeightPx = context.getResources().getDimensionPixelSize(R.dimen.peek_height);
bottomSheetBehavior.setPeekHeight(peekHeightPx);

В качестве альтернативы, вы можете использовать DisplayMetrics, чтобы выполнить вычисления самостоятельно:

int peekHeightPx = (int) (context.getResources().getDisplayMetrics().density * 120);
bottomSheetBehavior.setPeekHeight(peekHeightPx);
...