Android Bottomsheet TextView高度未在首次展开时调整

时间:2016-03-27 16:35:15

标签: android android-design-library bottom-sheet

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。

我的布局文件如下所示:

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); } } ........ } 之后发生了高度重新布局,因为我将其从崩溃中滑出并且多行已经存在。

提供了解决方法here。我跟着它并添加了这个:

Bottomsheet

第一次展开Bottomsheet时确实会重新调整高度。然而,它在扩展动画完成后突然发生。

有没有办法在扩展动画之前调整高度,就像谷歌地图一样?

更新

我发现此问题是因为我在展开之前已将STATE_COLLAPSED设置为STATE_COLLAPSED。如果没有设置那么问题就会消失,第一次正确调整高度。

现在我的问题是:为什么在扩展之前将其设置为package com.jabong.karaf.decanter.appender.elklog; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; public class ELKLogAppender implements EventHandler { @Override public void handleEvent(Event event) { for (String name : event.getPropertyNames()) { System.out.println("Custom Debraj" + name + ":" + event.getProperty(name)); } } } 会导致该问题?

2 个答案:

答案 0 :(得分:1)

如果由于某种原因你仍然需要使用旧的支持库,这里有解决方法。

mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull final View bottomSheet, int newState) {
            bottomSheet.post(new Runnable() {
                @Override
                public void run() {
                    //workaround for the bottomsheet  bug
                    bottomSheet.requestLayout();
                    bottomSheet.invalidate();
                }
            });
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
        }
    });

答案 1 :(得分:0)

切换到设计库24.0.0后,问题再也无法再现。

感谢Android团队的努力,让我们的生活更轻松,更轻松。