Я работаю с нижними таблицами в своем приложении.
<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);
В идеале этого не должно было быть. Я понятия не имею об этом. Спасибо.
@BenP. Я передаю 120, поскольку значение int было обязательным аргументом




setPeekHeight() (и многие другие методы, связанные с размером / размером) принимают значения пиксель в качестве своих аргументов. Это означает, что вам сначала нужно преобразовать значение 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);
Только сейчас я получил решение.
bottomSheetBehavior.setPeekHeight (R.dimen.peek_height); тоже работал. Спасибо
Это не должно работать. R.dimen.peek_height - это int, поэтому он должен компилироваться, но значение этого int может быть чем-то совершенно случайным. В отличие от, например, TextView.setText(), в BottomSheetBehavior нет встроенного метода, который разрешает идентификаторы ресурсов.
Но это работает безупречно. Может быть, этот тег dimen скомпилирует его с некоторым подходящим значением int. Я не знаю, могут ли два из этих значений совпадать или нет
Я буквально слаб в понятиях андроида.
Предположительно, вы на самом деле не передаете
120dpэтому вызову метода. Что именно вы проходите?