Android Bottomsheet TextView首次展开时未调整高度 TL;DR:TextView在Bottomsheet中,第一次展开Bottomsheet时不显示包装的多行文本,但在折叠后自行调整。

Android Bottomsheet TextView首次展开时未调整高度 TL;DR:TextView在Bottomsheet中,第一次展开Bottomsheet时不显示包装的多行文本,但在折叠后自行调整。,android,android-design-library,bottom-sheet,Android,Android Design Library,Bottom Sheet,因此,我使用的是design-23.2.1库中的底图 我的布局文件如下所示: <android.support.design.widget.CoordinatorLayout> ...... <LinearLayout android:id="@+id/bottom_sheet" android:layout_width="match_parent" android:layout_height="wrap_co

因此,我使用的是
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>
问题是,每当
底页设置为
状态时,第一次
文本视图是单行的,文本是换行的,行尾没有省略号

然后将其设置为
状态后,
文本视图
的高度很好,并且多行排列正确

我知道在设置为
状态_COLLAPSED
后发生了高度重新布局,因为我将其从collapse中滑出,并且多行已经存在

提供了一种变通方法。我遵循它并添加了以下内容:

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
设置为
STATE\u COLLAPSED
。如果未设置,则问题消失,并且第一次正确调整高度


现在我的问题是:为什么在展开之前将其设置为“状态”\u COLLAPSED
会导致该问题?

切换到design library 24.0.0后,该问题将无法再复制


感谢Android团队的努力,让我们的生活变得越来越轻松。

如果出于某种原因,您仍然需要使用旧的支持库,下面是解决方法

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) {
        }
    });

您是否用最新版本(目前为24.0.0)试用过?
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) {
        }
    });