#android #android-layout #android-linearlayout #android-relativelayout
#Android #android-layout #android-linearlayout #android-relativelayout
Вопрос:
Я пытаюсь достичь следующего:
- Мне нужно разместить
Button
вид где-нибудь в макете TextView
Прямо над этимButton
должно быть то, что используется в качестве метки- Размер
Button
должен зависеть от размераTextView
. Поскольку приложение локализовано, ширина текста не фиксирована, а зависит от локализованного текста, который используется в качестве метки. Button
Должно быть мин. ширина 150dp. Если ширинаTextView
больше этого,Button
она должна иметь ту же ширину, что иTextView
.
Это должно выглядеть примерно так:
Short Label
-------------
-------------
Very Long Label Text
------------------
------------------
Я пробовал разные решения с LinearLayout или RelativeLayout в качестве корневого макета, но проблема всегда одна и та же: я не смог подогнать ширину Button
к ширине TextView
. Предоставление Button
минимальной ширины 150dp, конечно, не проблема. Но как решить второй случай с длинной меткой?
<SomeRootLayout ...>
<!-- also tried LinearLayout, but problem is the same... -->
<RelativeLayout
android:id="@ id/editTextAndLabelContainer"
...>
<TextView
android:id="@ id/labelTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A " />
<Button
android:id="@ id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@ id/labelTV" />
</RelativeLayout>
</SomeRootLayout>
Если Button
имеет ширину «match_parent», ширина не выравнивается TextView
, а устанавливается на полную ширину экрана.
Как я могу это решить?
Комментарии:
1. сделай это programatically..by getwidth() для textview … и если больше, то установите ширину для кнопки такой же, как для textview….
Ответ №1:
<RelativeLayout
android:id="@ id/editTextAndLabelContainer"
...>
<TextView
android:id="@ id/labelTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A " />
<Button
android:id="@ id/button"
android:layout_alignLeft="@ id/labelTV" //<== add this line
android:layout_alignRight="@ id/labelTV" //<== add this line
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@ id/labelTV" />
</RelativeLayout>
Комментарии:
1. Большое вам спасибо! Я не знал, что разные выравнивания могут быть объединены… Это решение работает отлично!
Ответ №2:
Ok..do что-то вроде: layout:
<LinearLayout
android:id="@ id/editTextAndLabelContainer"
android:weightSum="2"
...>
<TextView
android:id="@ id/labelTV"
android:layoutWeight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A " />
<Button
android:id="@ id/button"
android:layoutWeight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@ id/labelTV" />
</LinearLayout>
Или как предлагает Лена..
И в вашем Java-коде: добавьте TextWatcher
в свой метод textview ontextchange
.. и в side after textchange
метод сделайте что-то вроде:
int txtWidth = your_textViw.getWidth();
int btnWidth = your_button.getWidth();
if(txtWidth >= btnWidth)
your_button.setWidth(txtWidth);