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

问题描述:

我需要在文本字段下方画一条水平线,以便线的宽度等于文本宽度(而不是全屏的宽度)。如何设置等于另一个部件的宽度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" /> 
      ...... 

形象是:

enter image description here

请帮助我。

+0

你可以通过它的'LayoutParams'以编程方式获得你的textview的宽度,然后使用'LayoutParams'将这个宽度应用到你的水平线上。你会发现*很多例子用于在Java中设置宽度。 – 2012-04-02 13:54:39

如果使用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" /> 
+0

谢谢解决。 – 2012-04-02 13:59:54

+1

正确,因为它是最简单的:) – lazyguy 2014-07-24 18:40:00

+0

保存我的整个一天,谢谢:) – themarketka 2014-09-12 12:47:55

这取决于你的使用情况。如果您打算动态修改布局中的东西,并让它们的大小与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" /> 

使用的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> 
+0

不错的工作... – Avi 2014-11-10 06:39:53

使用这两个属性,如果您使用的是一个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> 

当然b其他文本字段都设置为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()); 
+1

感谢您的命令,我会检查并让你知道。 – 2013-05-14 08:51:13

+0

试一试,让我知道。它为我工作,所以它也应该为你工作。我相信它也应该执行命令,如果您的用户旋转他们的设备方向,那么无论他们如何使用他们的设备,您的视图看起来都会很棒。 – Argus9 2013-05-14 16:35:35

java的说,什么是正确的 - 如果你不使用RelativeLayout和最简单的,但什么包含View的?

如果您在onCreate()中自定义UI,那么您会发现从另一个小部件获取宽度会给您一个错误的结果!这是因为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 (i.e. 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>