在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)
您可以使用TextView
的setWidth()
方法来设置动态
您还可以设置宽度百分比按照大小
<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>
需要注意的重要一点是,将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));
}
感谢这个简单而直接的解释了很多。我是新来的布局,这为我节省了很多时间。 – BrunoPugliese 2017-01-08 13:01:08