TL;DR: TextView
в Bottomsheet
не показывает перенос многострочного текста при первом раскрытии Bottomsheet
, но настраивается после его свертывания.
Поэтому я использую нижний лист из библиотеки design-23.2.1
.
Мой файл макета выглядит так:
<android.support.design.widget.CoordinatorLayout>
......
<LinearLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:behavior_peekHeight="@dimen/bottom_sheet_peek_height"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"/>
</android.support.design.widget.CoordinatorLayout>
Содержимое Bottomsheet
в основном представляет собой список:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="false" />
...
</LinearLayout>
Проблема заключается в том, что всякий раз, когда Bottomsheet
устанавливается на STATE_EXPANDED
в первый раз, TextView
является одной строкой, а текст переносится, а в конце строки нет многоточия …
.
Затем, после того, как он установлен на STATE_COLLAPSED
, высота TextView
в порядке и правильно многострочная.
Я знаю, что перераспределение по высоте произошло после установки значения STATE_COLLAPSED
, потому что я сдвигаю его от свертывания, а многострочное уже есть.
Обходной путь представлен здесь. Я последовал за ним и добавил это:
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_EXPANDED) {
bottomSheetBehavior.onLayoutChild(coordinatorLayout,
bottomSheetView,
ViewCompat.LAYOUT_DIRECTION_LTR);
}
}
........
}
На самом деле это заставило перенастроить высоту, когда Bottomsheet
расширяется в первый раз. Однако это произошло внезапно сразу после завершения анимации расширения.
Есть ли способ отрегулировать высоту перед расширяющейся анимацией, как это делает Google Map?
Обновить
Я обнаружил, что эта проблема связана с тем, что я установил Bottomsheet
на STATE_COLLAPSED
до того, как он был расширен. Если это не было установлено, проблема исчезла, и высота отрегулирована правильно с первого раза.
Теперь мой вопрос: зачем устанавливать его на STATE_COLLAPSED
, прежде чем расширение вызовет эту проблему?