在LinearLayout中设置textview的宽度

时间:2010-04-20 15:03:30

标签: android

我正在使用Listview的标头。 ListView标题有三列。说a,b,c。我使用两个LinearLayouts来设计ListView标头,如下所示:

<?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是一个好习惯吗?请告知。

4 个答案:

答案 0 :(得分:14)

要将textviews的layout_width更改为固定宽度,请使用:

 android:layout_width="40dip"

或者您希望他们占用屏幕的百分比更改layout_weight

 android:layout_weight="2"

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

如果您想要列,则应考虑使用表格布局(tutorial

答案 1 :(得分:4)

您还可以按照以下步骤设置宽度百分比

<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>

答案 2 :(得分:2)

您可以使用setWidth()的{​​{1}}方法动态设置大小

答案 3 :(得分:0)

如果您在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));
}