Android - Изменение высоты нижнего диалогового окна для размещения нового текста - PullRequest
1 голос
/ 06 июля 2019

У меня есть фрагмент кода, активируемый нажатием кнопки:

           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();

И мой макет фрагмента_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>

В большинстве случаев он работает нормально, но бывают случаи, когда к текстовому представлению добавляется текст или отображается очень большой фрагмент текста, и в этом случае верхняя часть текста исчезает или усекается, как FIFO. Как я могу предотвратить это и изменить размер диалога, чтобы вместить весь текст? Я думал об установке высоты нижнего листа как tv.getLineCount () * tv.getLineHeight (), но я не могу найти простой способ применить это к самому диалогу.

РЕДАКТИРОВАТЬ: после дальнейшего расследования я заметил еще одну проблему. Если я открою нижнее диалоговое окно, содержащее длинный фрагмент текста, и прокручиваю его вверх, чтобы верхняя часть диалогового окна уходила за верхнюю часть окна, а когда я прокручиваю назад вниз, пропавший сверху текст пропускается. Это может быть связано с проблемой, с которой я столкнулся выше.

1 Ответ

0 голосов
/ 07 июля 2019

Добавьте это после вашего .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);

Также попробуйте обернуть ваше текстовое представление в представление прокрутки

<?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

...