如何设置在android上等于另一个小部件的宽度

我需要在文本字段下方画一条水平线,以使线条的宽度等于文本宽度(而不是全屏的宽度)。

在我的应用程序中,我有一个视图下方的文本视图(水平线)。 线视图宽度应该等于textview宽度 。 我试过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" /> ...... 

屏幕的图像是:

在这里输入图像说明

请帮帮我。

如果你使用RelativeLayout你可以使用align attribute:

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

如果您有多个想要使用统一宽度的小部件,只需重复上述代码即可。 例如,假设有一个button我想调整宽度来匹配其他元素:

 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> 

Jave说的是正确的 – 也是最简单的,但是如果你不使用RelativeLayout来包含视图?

如果你在onCreate()中定制你的UI,那么你会发现从另一个小部件获得宽度会给你一个不正确的结果! 这是因为用户界面尚未设置。

但是,您仍然可以在onCreate中设置您的UI …只需运行UI设置后执行的代码即可。 这是通过使用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> 

这取决于你的用例。 如果您计划dynamic修改布局中的东西,并使其尺寸与TextView相同,则可能需要将它们一起包装在父视图中。 如果这是一次性的事情,请按照其他答案中的build议使用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" />