在LinearLayout中设置textview的宽度

问题描述:

我正在使用Listview的标题。 ListView标题有三列。说a,b,c。我使用两个LinearLayouts设计ListView的标头,如下面所示:在LinearLayout中设置textview的宽度

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="40dip" 
android:padding="0dip"> 
<LinearLayout 
    android:orientation="horizontal" 
    android:background="#1e90ff" 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:padding="5dip" 
    android:layout_height="40dip"> 
    <TextView 
     android:id="@+id/a" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:text="@string/a" 
    /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:id="@+id/b" 
     android:singleLine="true" 
     android:text="@string/b" 
    /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:id="@+id/c" 
     android:singleLine="true" 
     android:text="@string/c" 
    /> 
</LinearLayout> 
</LinearLayout> 

现在我要修复列的宽度A,B,C分别。如何设置这些列的宽度?再说一次,为此使用LinearLayout是一个好习惯吗?请指教。

要改变你的textviews的layout_width为固定宽度的使用:

android:layout_width="40dip" 

或您希望他们采取了屏幕的百分比改变layout_weight

android:layout_weight="2" 

在机器人的重量在另一个元素中的所有元素(例如这里的线性布局)将被添加到一起,然后使用每个视图的权重来定义它需要多少空间。 I.E.如果你的权重分别为a,b,c的2,3,5,那么a将是20%宽,b 30%宽,c 50%宽。

如果你想列,你应该考虑使用表格布局(tutorial

+1

感谢这个简单而直接的解释了很多。我是新来的布局,这为我节省了很多时间。 – BrunoPugliese 2017-01-08 13:01:08

您可以使用TextViewsetWidth()方法来设置动态

您还可以设置宽度百分比按照大小

<LinearLayout 
    android:orientation="horizontal" 
    android:background="#1e90ff" 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:padding="5dip" 
    android:layout_height="40dip"> 

    <!-- 
     android:layout_weight="0.5" <= it will set the 50 % width of screen 
    --> 
    <TextView 
     android:id="@+id/a" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="0.5" 
     android:gravity="center_vertical" 
     android:text="@string/a" 
    /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="#000000" 
     android:layout_weight="0.5" 
     android:gravity="center_vertical" 
     android:id="@+id/b" 
     android:singleLine="true" 
     android:text="@string/b" 
    /> 
</LinearLayout> 
+0

需要注意的重要一点是,将layout_weight-attribute设置为什么具体数字并不重要,它是重要的比率。例如,如果0.5被换出为1.0或5.0,那么您的XML将执行完全相同的操作,只要您将它交换到任意位置。虽然你的小数可能是有帮助的,因为你可以很容易地计数并查看它们是否合计为1.0。 – 2012-11-29 12:02:51

如果您在ListView中使用的布局中执行此操作,则只能在代码中动态设置宽度。我的列表中实际上有三个TextView,但为了简洁,我只在这里显示两个。下面是从布局XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:weightSum="100"> 

    <TextView 
     android:id="@+id/sl_name" 
     android:layout_width="wrap_content" 
     android:layout_weight="40" 
     android:layout_height="wrap_content" 
     android:textSize="16sp"/> 

    <TextView 
     android:id="@+id/sl_score" 
     android:textSize="16sp" 
     android:gravity="right" 
     android:paddingRight="8dp" 
     android:layout_width="wrap_content" 
     android:layout_weight="15" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

下面是从适配器为ListView内码:

public View getView(int position, View cvtView, ViewGroup parent) 
    { 
    int width = parent.getWidth(); 
    View rowView = inflater.inflate(R.layout.scorelayout, parent, false); 
    String str = values.get(position); 
    String[] vals = str.split("\t"); 

    TextView tvName = (TextView)rowView.findViewById(R.id.sl_name); 
    tvName.setWidth((int)(width *.30)); 
    tvName.setText(vals[2]); 

    TextView tvScore = (TextView)rowView.findViewById(R.id.sl_score); 
    int stemp = Integer.parseInt(vals[0]); 
    tvScore.setWidth((int)(width * .15)); 
    tvScore.setText(Integer.toString(stemp)); 
}