У меня есть горизонталь, LinearLayout
содержащая a, TextView
за которой следует a Spinner
. Он LinearLayout
динамически раздувается несколько раз в фиксированной вертикали, LinearLayout
содержащейся в RelativeLayout
.
Проблема в том, что с тех пор, как я переключился с Theme.light
на Theme.holo.light
, последняя строка строки TextView
разрезается пополам. Это происходит, когда динамический текст длинный и занимает более одной строки.
Я смог исправить это, добавив нижнюю прокладку к горизонтали, LinearLayout
содержащей TextView
и Spinner
.
Это не похоже на исправление, а скорее на взлом. Может кто-нибудь дать мне совет, как это исправить?
Я также читал некоторые другие вопросы, но, похоже, никто не помогает.
Горизонтальная линейная компоновка:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView1"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:text="TextView"/>
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Относительный макет, где макет выше динамически раздувается в Linear Layout с идентификатором ll2_7:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/relLayoutButtonNext"
android:layout_below="@id/textView1" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp" >
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="30dp"
android:text="2.7" />
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_toRightOf="@id/textView10"
android:text="@string/question2_7" />
<LinearLayout
android:id="@+id/ll2_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView11"
android:layout_below="@+id/textView11"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
РЕДАКТИРОВАТЬ: Вот полный макет xml для выше:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
style="@style/question_section_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/question2_header" />
<RelativeLayout
android:id="@+id/relLayoutButtonNext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/bottomBar"
android:paddingBottom="3dp"
android:paddingLeft="50dp"
android:paddingRight="50dp"
android:paddingTop="3dp" >
<Button
android:id="@+id/buttonNext"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:onClick="nextStep"
android:text="Next Section"
android:textSize="20sp" />
<Button
android:id="@+id/buttonPrevious"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:onClick="previousStep"
android:text="Previous Section"
android:textSize="20sp" />
</RelativeLayout>
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/relLayoutButtonNext"
android:layout_below="@id/textView1" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp" >
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="30dp"
android:text="2.7" />
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_toRightOf="@id/textView10"
android:text="@string/question2_7" />
<LinearLayout
android:id="@+id/ll2_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView11"
android:layout_below="@+id/textView11"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView10"
android:layout_below="@+id/ll2_7"
android:text="2.8" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_7"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_8" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView3"
android:layout_below="@+id/textView3"
android:layout_marginBottom="20dp"
android:orientation="vertical" >
</LinearLayout>
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/ll2_8"
android:text="2.9" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_8"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_9" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView5"
android:layout_toRightOf="@+id/textView10"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView4"
android:layout_below="@+id/ll2_9"
android:text="2.10" />
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_9"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_10" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView7"
android:layout_marginBottom="20dp"
android:layout_toRightOf="@+id/textView10"
android:orientation="vertical" >
</LinearLayout>
<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView6"
android:layout_below="@+id/ll2_10"
android:text="2.11" />
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_10"
android:layout_toRightOf="@+id/textView10"
android:text="@string/quesiton2_11" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView9"
android:layout_below="@+id/textView9"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView8"
android:layout_below="@+id/ll2_11"
android:text="2.11.1" />
<TextView
android:id="@+id/textView13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_11"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_11_1" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_11_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView13"
android:layout_toRightOf="@+id/textView10"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
источник
Ответы:
Я столкнулся с той же проблемой отключения, что и на скриншоте. Это вызвано выравниванием базовой линии по горизонтали
LinearLayout
.TextView
иSpinner
имеют разные базовые значения из-за разницы в размере шрифта. Чтобы решить эту проблему, необходимо отключить выравнивание базовой линии для макета, установив:или в коде:
источник
Попробовав миллион разных вещей, я думаю, что у меня есть ответ.
Я применил
LayoutGravity
к элементу TextView:Кажется, это решило все мои проблемы с отсечением. Надеюсь, это поможет кому-то с той же проблемой.
источник
@android:style/Widget.TextView
и добавляю следующие строки:<item name="android:gravity">fill</item>
<item name="android:padding">1sp</item>
android:baselineAligned="false"
в свойLinearLayout
У меня была такая же проблема, и я обнаружил, что просто добавляя
нижние элементы последней строки текста больше не были обрезаны.
источник
Я добавил пробел после текста, добавив
Я пробовал все другие решения, но это было единственное решение, которое сработало для меня
источник
Поместите проблемное текстовое представление внутрь макета фрейма. Я думаю, что текстовое представление вычисляется неправильно из-за родственного представления Spinner.
источник
CheckBox
такое жеLinearLayout
. Это решило проблему.Когда это происходит, вы должны убедиться, что
TextView
он не растет больше, чем контейнер -Если для a
TextView
установлено значениеwrap_content
и его контейнер (или контейнер-предок) не оставляет места дляTextView
роста, он может быть закрыт.Если это не так, то это также возможно
onMeasure()
изTextView
иногда не правильно измерить хвосты букв, не латинских символов или эффектов текста является наклонным. Вы можете исправить это, установив для себя глобальный стиль,TextView
чтобы его можно было подобрать без необходимости изменять всю базу кода:Убедитесь, что ваше приложение / действия используют настраиваемую тему, например:
Ответ @Rynadt был действительно полезен для перехода к вышеуказанному этапу. Установка силы тяжести текста внутри представления гарантирует на некоторых устройствах, что окклюзия никогда не происходит (текст правильно размещен внутри представления), на других рука помощи с заполнением значения sp гарантирует, что хвосты и другие учитываются с конкретным значением TextSize.
источник
Мое решение было близко к принятому, но мне пришлось изменить его на
вместо. В противном случае другие строки также были бы растянуты с добавлением разрывов строк в случайных местах. Например, в самой большой строке было 4 строки, поэтому другая строка была изменена с
this is a testphrase
к
источник
Я нашел другое решение, расширив TextView и добавив собственный класс следующим образом:
источник
this.setEllipsize(TextUtils.TruncateAt.END);
в оператор if выше и удалитеandroid:ellipsize="end"
из XML, который по какой-то причине его нарушает.попробуйте удалить android: paddingBottom = "20dp"
из
источник
getViewTreeObserver().addOnGlobalLayoutListener
не работает в режиме ресайклера. Если вы используете ресайклер, используйтеView.addOnLayoutChangeListener
:Я обнаружил, что многоточие, которое я определил
textView
в xml, не всегда отражалось, поэтому я программно установил его перед переназначением свойства text. Это сработало для меня.источник
Если у вас возникла эта проблема и вы находитесь
TextView
внутри aRelativeLayout
, попробуйте переключить ееRelativeLayout
наLinearLayout
.Это устранило проблему для меня
источник
Вы можете использовать прослушиватель глобального макета для TextView в любом типе ViewGroup.
Вы можете прочитать об этом здесь
источник
Я думаю, что вы мало что можете сделать, чтобы заставить это работать, изменяя макеты. Как я обнаружил, некоторые методы работают только в некоторых случаях. Я думаю, что это зависит от всей иерархии макетов и не является универсальным решением. Я также заметил, что это происходит, особенно когда у вас есть другой шрифт, который вы хотите установить для TextView.
Верный метод, который я экспериментировал и тестировал, заключается в том, что вы можете установить атрибуты шрифта в коде после того, как представление будет увеличено. Я предполагаю, что в папке assets / fonts у вас есть нужный вам шрифт.
Например, во фрагменте:
И в действии:
источник
У меня такая же проблема, и это очень раздражает.
Это происходит только с арабским текстом.
Если вы сделаете метку многострочной и добавите
\n
в конец строки, это исправит ее, но проблема в том, что между этой меткой и объектом под ней будет большой промежуток из-за того, что это поле теперь под ним новая пустая строка.Чтобы обойти это, можно использовать специальный элемент управления. Но в целом это досадный баг.
источник
Лучшее обходное решение для этого - добавить фиктивный View желаемой высоты (т.е. это добавит само отступы) внизу вашего представления.
Как и в моем случае, я добавил еще одну строку таблицы внизу представления. Надеюсь, это может кому-то помочь.
источник
Я знаю, что уже так поздно, но для меня это работа как шарм. добавьте этот код в свой
textview
источник
Добавьте отступ в нижнюю часть текстового представления:
источник
Я наконец исправил это!
Я пытаюсь добавить String в TextView в Service, а затем вызываю scrollTo (), последняя строка будет обрезана!
ScrollTo () следует вызывать в «Runnable», например:
Я думаю, это потому, что в момент вызова scrollTo () в сервисе обновление TextView не готово.
источник