Android-更改底部对话框的高度以适应新文本

时间:2019-07-06 11:16:35

标签: android textview bottom-sheet

我有一段代码,可以通过按一个按钮来激活:

           helpdialog = new BottomSheetDialog(this);

            View view = getLayoutInflater().inflate(R.layout.fragment_bottom_layout, null);

            helpdialog.setContentView( view );

            TextView tv = (TextView) view.findViewById( R.id.splo);

               // Text to place in dialog omitted

            tv.setText( sp );

            helpdialog.show();

我的fragment_bottom_layout.xml布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text=""
            android:id="@+id/splo"
       />
</LinearLayout>

在大多数情况下它都可以正常工作,但是在某些情况下,文本会附加到textview或显示很大的文本,在这种情况下,它会迫使文本顶部消失或被截断,像FIFO。如何防止这种情况并调整对话框的大小以容纳所有文本?我曾考虑过将底部工作表的高度设置为tv.getLineCount()* tv.getLineHeight(),但我找不到将其应用于对话框本身的简便方法。

编辑:经过进一步调查,我注意到了另一个问题。如果我打开一个包含较长文本的底部对话框,然后向上滚动以使对话框的顶部脱离窗口的顶部,则当我向下滚动时,缺少顶部的文本会丢失。这可能与我上面遇到的问题有关。

1 个答案:

答案 0 :(得分:0)

在您的.show()之后添加它

                //androidX
                View bottomSheetInternal = helpdialog.findViewById(com.google.android.material.R.id.design_bottom_sheet);


                /*
                not androidX use:
                View bottomSheetInternal = helpdialog.findViewById(android.support.design.R.id.design_bottom_sheet);
                 */

                BottomSheetBehavior.from(bottomSheetInternal).setState(BottomSheetBehavior.STATE_EXPANDED);
                BottomSheetBehavior.from(bottomSheetInternal).setFitToContents(true);
                BottomSheetBehavior.from(bottomSheetInternal).setHideable(false);

还尝试将textview封装在滚动视图中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ScrollView
        android:layout_height="wrap_content"
        android:layout_width="match_parent">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=""
            android:id="@+id/splo"/>
    </ScrollView>
</LinearLayout>

查看完整的演示 https://github.com/Gaineyj0349/BottomSheetBehaviourExample