Intereting Posts
Несколько файлов dex определяют Lcom / google / ads / AdRequest $ Файлы ErrorCode и Multix dex определяют Lcom / google / ads / AdRequest $ ErrorCode Удаление фрагментов из FragmentStatePagerAdapter Неопределенный круговой индикатор хода на андроиде белый, несмотря на цвет. Android Studio: звуковое оповещение о успехе сборки Обновлено до версии SDK 2.3 – теперь эмуляторы не имеют возможности подключения Пользовательский конструктор представлений не вызывается в android 5.0.2 Как получить уведомление, когда устройство теряет сетевое подключение? Повторно подписать Android Apk Заменить верхний фрагмент на задний стек Как переключить версию Android в локальное репо? Как использовать предварительно скомпилированные заголовки в проекте Android NDK? Использование dispatchDraw (холст холста) Как robospice управляет жизненным циклом деятельности? Изменение размера растрового изображения на фиксированное значение, но без изменения соотношения сторон Ионная ошибка отображения, если gps выключен

Как установить ширину, которая равна другому виджету на Android

Мне нужно нарисовать горизонтальную линию под текстовым полем так, чтобы ширина линии равнялась ширине текста (а не ширине полного экрана).

В моем приложении у меня есть текстовое представление ниже вида (горизонтальная линия). Ширина представления линии должна быть равна ширине текста . Я пробовал Android: layout_width = "wrap_content" и "match_parent", что не решает проблему.

Это пример кодирования xml:

...... <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="28dp" android:text="PopUpWindow" android:textAppearance="?android:attr/textAppearanceLarge" /> <View android:id="@+id/separator" android:layout_width="wrap_content" android:layout_height="0.3dp" android:layout_below="@+id/textView1" android:background="#ffffff" /> ...... 

Изображение экрана:

Введите описание изображения здесь

пожалуйста помогите.

Solutions Collecting From Web of "Как установить ширину, которая равна другому виджету на Android"

Если вы используете RelativeLayout вы можете использовать align -attributes:

 <View android:id="@+id/separator" android:layout_width="0dp" android:layout_height="0.3dp" android:layout_below="@+id/textView1" android:layout_alignLeft="@+id/textView1" android:layout_alignRight="@+id/textView1" android:background="#ffffff" /> 

Если вы используете макет, отличный от RelativeLayout, вы можете программно использовать ширину ваших виджетов, например, в этом примере:

layout.xml:

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Here's some text" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Some more text" /> </LinearLayout> 

Обратите внимание, что оба текстовых поля установлены в wrap_content.

Main.java:

 TextView tv1 = (TextView) findViewById(R.id.text1); TextView tv2 = (TextView) findViewById(R.id.text2); if(tv1.getWidth() < tv2.getWidth()) tv1.setWidth(tv2.getWidth()); else tv2.setWidth(tv1.getWidth()); 

Если у вас есть несколько виджетов, которые вы хотите иметь равномерную ширину, просто повторите приведенный выше код для нового элемента. Например, предположим, что была кнопка, которую я хотел бы настроить ширину, чтобы соответствовать другим элементам:

 if(tv2.getWidth() < button) tv2.setWidth(button.getWidth()); else button.setWidth(tv2.getWidth()); 

Используйте RelativeLayout и используйте эти два атрибута в горизонтальном представлении линии

  android:layout_alignLeft="@+id/textView1" android:layout_alignRight="@+id/textView1" <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.23" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="67dp" android:text="this is TextView" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="10dp" android:layout_alignLeft="@+id/textView1" android:layout_alignRight="@+id/textView1" android:layout_below="@+id/textView1" android:background="#FF0000" android:text="" /> </RelativeLayout> 

То, что Джейв сказал правильно, – и самый простой, но что, если вы не используете RelativeLayout чтобы содержать View?

Если вы настраиваете свой пользовательский интерфейс в onCreate (), вы обнаружите, что получение ширины от другого виджета даст вам неправильный результат! Это потому, что пользовательский интерфейс еще не настроен.

Но вы все равно можете настроить свой интерфейс в onCreate … просто запустите код, который выполняется после настройки пользовательского интерфейса. Это достигается с помощью команды View.post() .

XML:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:gravity="center"> <Button android:id="@+id/button_one" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:text="short string" /> <Button android:id="@+id/button_two" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="this is a longer string" /> </LinearLayout> </RelativeLayout> 

Код Java:

 private Button mButtonOne; private Button mButtonTwo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // inflate UI setContentView(R.layout.activity_example); // get references to UI elements mButtonOne = (Button)findViewById(R.id.button_one); mButtonTwo = (Button)findViewById(R.id.button_two); // Make buttons the same size (ie Button1.width = Button2.width) if ((mButtonOne != null) && (mButtonTwo != null)) { mButtonOne.post(new Runnable() { @Override public void run() { mButtonOne.setWidth(mButtonTwo.getWidth()); } }); } } 

В результате ширина button_one будет соответствовать ширине button_two . Это более приятный взгляд, когда количество текста сильно варьируется между двумя представлениями.

Если вы не хотите использовать RelativeLayout, вы можете установить ширину родительского элемента для переноса содержимого, а ширина родителя станет равной самому большому ребенку. Затем вы можете установить ширину маленького дочернего элемента match_parent и соответствовать ширине требуемого вида.

  <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical|left" android:orientation="vertical" android:layout_gravity="center_vertical" android:padding="5dp"> <TextView android:id="@+id/navHeaderName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/profile_progress_bar" android:text="This is a large text" android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> <ProgressBar android:id="@id/profile_progress_bar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="45" /> </LinearLayout> 

Это зависит от вашего варианта использования. Если вы планируете динамически изменять элементы в макете и иметь их размер так же, как и TextView, возможно, вам захочется обернуть их в родительском представлении вместе. Если это разовая вещь, используйте RelativeLayout, как это предлагает другой ответ.

 <LinearLayout android:orientation="vertical" ... > <!-- layout parameters as appropriate--> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="28dp" android:text="PopUpWindow" android:textAppearance="?android:attr/textAppearanceLarge" /> <View android:id="@+id/separator" android:layout_width="match_parent" android:layout_height="0.3dp" android:layout_below="@+id/textView1" android:background="#ffffff" /> </LinearLayout> 

Использование нижеследующий ширина атрибут.

  <TextView android:id="@+id/textView1" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="28dp" android:text="PopUpWindow" android:textAppearance="?android:attr/textAppearanceLarge" /> <View android:id="@+id/separator" android:layout_width="150dp" android:layout_height="0.3dp" android:layout_below="@+id/textView1" android:background="#ffffff" />