我正在使用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是一个好习惯吗?请告知。
答案 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));
}