Android 在自定义 ListView 中,TextView 权重 属性 不工作
Android Inside Custom ListView, TextView Weight property not working
我有一个自定义列表视图。列表视图数据由一些文本视图水平设置为每一行。在主布局中,我有相同数量的 textView 用于设置这些列的标题。我的问题是,主布局在权重 属性 下工作正常。但是包含文本视图的列表视图的自定义值设置布局不适用于权重 属性.
主要布局:(权重 属性 正常工作)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:weightSum="8">
<TextView
android:layout_weight="0"
android:id="@+id/cid"
android:layout_width="0dp"
android:textSize="16dp"
android:text="B.Id" />
<TextView
android:layout_weight="1"
android:id="@+id/nm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Name" />
<TextView
android:layout_weight=".9"
android:id="@+id/mob"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Mobile" />
<TextView
android:layout_weight="1.2"
android:id="@+id/eml"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Email" />
<TextView
android:layout_weight=".8"
android:id="@+id/bk_no"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Bike No" />
<TextView
android:layout_weight=".4"
android:id="@+id/dy_rt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Rate" />
<TextView
android:layout_weight=".9"
android:id="@+id/frm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="From Date" />
<TextView
android:layout_weight=".9"
android:id="@+id/to"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="To Date" />
<TextView
android:layout_weight=".25"
android:id="@+id/dy"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Dys" />
<TextView
android:layout_weight=".45"
android:id="@+id/cst"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight="0"
android:id="@+id/vid"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="V.ID" />
<TextView
android:layout_weight=".9"
android:id="@+id/book_dt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="1dp"
android:text="Bk Date" />
<TextView
android:layout_weight=".3"
android:id="@+id/rting"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Rating" />
</LinearLayout>
<ListView
android:id="@+id/list_past_report"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></ListView>
</LinearLayout>
</LinearLayout>
自定义 ListView 值设置布局:(report_custom_list)(权重 属性 无效)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/cus_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:weightSum="8" >
<TextView
android:layout_weight="0"
android:id="@+id/id"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight="1"
android:id="@+id/nm"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".9"
android:id="@+id/mob"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight="1.2"
android:id="@+id/eml"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".8"
android:id="@+id/bk_no"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".4"
android:id="@+id/dy_rt"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".9"
android:id="@+id/frm"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".9"
android:id="@+id/to"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".25"
android:id="@+id/dy"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".45"
android:id="@+id/cst"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight="0"
android:id="@+id/vid"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".9"
android:id="@+id/book_dt"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".3"
android:id="@+id/rting"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
自定义适配器设置值:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final Object[] id_obj=_id.toArray();
Object[] name_obj=c_name1.toArray();
Object[] mb_obj=m_no1.toArray();
Object[] eml_obj=email1.toArray();
...
Holder holder=new Holder();
View rowView;
rowView = inflater.inflate(R.layout.report_custom_list, null);
if(position%2==0)
rowView.setBackgroundColor(Color.YELLOW);
else
rowView.setBackgroundColor(Color.GRAY);
holder.tv=(TextView) rowView.findViewById(R.id.id);
holder.tv1=(TextView) rowView.findViewById(R.id.nm);
holder.tv2=(TextView) rowView.findViewById(R.id.mob);
...
holder.tv.setText((CharSequence) id_obj[position]);
holder.tv1.setText((CharSequence) name_obj[position]);
holder.tv2.setText((CharSequence) mb_obj[position]);
...
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
return rowView;
}
在我硬编码文本视图的宽度之前。但如果它转到不同的屏幕,设计就会崩溃。如何解决这个问题?
可能的问题是:
<ListView
android:id="@+id/list_past_report"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>`
将layout_width="wrap_content"
替换为layout_width="match_parent"
我想你必须用这个更新你的主布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list_past_report"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></ListView> </LinearLayout>
并对适配器进行一些更改 class 也
public View getView(final int position, View convertView, ViewGroup parent) {
final Object[] id_obj=_id.toArray();
Object[] name_obj=c_name1.toArray();
Object[] mb_obj=m_no1.toArray();
Object[] eml_obj=email1.toArray();
...
Holder holder=new Holder();
View rowView;
rowView = inflater.inflate(R.layout.report_custom_list, null);
if(position%2==0)
rowView.setBackgroundColor(Color.YELLOW);
else
rowView.setBackgroundColor(Color.GRAY);
holder.tv=(TextView) rowView.findViewById(R.id.id);
holder.tv1=(TextView) rowView.findViewById(R.id.nm);
holder.tv2=(TextView) rowView.findViewById(R.id.mob);
...
if(position == 0){
holder.tv.setText("Title1");
holder.tv.setText("Title2");
holder.tv.setText("Title3");
....
}
else{
holder.tv.setText((CharSequence) id_obj[position]);
holder.tv1.setText((CharSequence) name_obj[position]);
holder.tv2.setText((CharSequence) mb_obj[position]);
...
}
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
return rowView;}
将列表视图 layout_width
更改为 fill_parent
android:layout_width="fill_parent"
我有一个自定义列表视图。列表视图数据由一些文本视图水平设置为每一行。在主布局中,我有相同数量的 textView 用于设置这些列的标题。我的问题是,主布局在权重 属性 下工作正常。但是包含文本视图的列表视图的自定义值设置布局不适用于权重 属性.
主要布局:(权重 属性 正常工作)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:weightSum="8">
<TextView
android:layout_weight="0"
android:id="@+id/cid"
android:layout_width="0dp"
android:textSize="16dp"
android:text="B.Id" />
<TextView
android:layout_weight="1"
android:id="@+id/nm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Name" />
<TextView
android:layout_weight=".9"
android:id="@+id/mob"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Mobile" />
<TextView
android:layout_weight="1.2"
android:id="@+id/eml"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Email" />
<TextView
android:layout_weight=".8"
android:id="@+id/bk_no"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Bike No" />
<TextView
android:layout_weight=".4"
android:id="@+id/dy_rt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Rate" />
<TextView
android:layout_weight=".9"
android:id="@+id/frm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="From Date" />
<TextView
android:layout_weight=".9"
android:id="@+id/to"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="To Date" />
<TextView
android:layout_weight=".25"
android:id="@+id/dy"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Dys" />
<TextView
android:layout_weight=".45"
android:id="@+id/cst"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight="0"
android:id="@+id/vid"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="V.ID" />
<TextView
android:layout_weight=".9"
android:id="@+id/book_dt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="1dp"
android:text="Bk Date" />
<TextView
android:layout_weight=".3"
android:id="@+id/rting"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Rating" />
</LinearLayout>
<ListView
android:id="@+id/list_past_report"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></ListView>
</LinearLayout>
</LinearLayout>
自定义 ListView 值设置布局:(report_custom_list)(权重 属性 无效)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/cus_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:weightSum="8" >
<TextView
android:layout_weight="0"
android:id="@+id/id"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight="1"
android:id="@+id/nm"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".9"
android:id="@+id/mob"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight="1.2"
android:id="@+id/eml"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".8"
android:id="@+id/bk_no"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".4"
android:id="@+id/dy_rt"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".9"
android:id="@+id/frm"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".9"
android:id="@+id/to"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".25"
android:id="@+id/dy"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".45"
android:id="@+id/cst"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight="0"
android:id="@+id/vid"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".9"
android:id="@+id/book_dt"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:layout_weight=".3"
android:id="@+id/rting"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
自定义适配器设置值:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final Object[] id_obj=_id.toArray();
Object[] name_obj=c_name1.toArray();
Object[] mb_obj=m_no1.toArray();
Object[] eml_obj=email1.toArray();
...
Holder holder=new Holder();
View rowView;
rowView = inflater.inflate(R.layout.report_custom_list, null);
if(position%2==0)
rowView.setBackgroundColor(Color.YELLOW);
else
rowView.setBackgroundColor(Color.GRAY);
holder.tv=(TextView) rowView.findViewById(R.id.id);
holder.tv1=(TextView) rowView.findViewById(R.id.nm);
holder.tv2=(TextView) rowView.findViewById(R.id.mob);
...
holder.tv.setText((CharSequence) id_obj[position]);
holder.tv1.setText((CharSequence) name_obj[position]);
holder.tv2.setText((CharSequence) mb_obj[position]);
...
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
return rowView;
}
在我硬编码文本视图的宽度之前。但如果它转到不同的屏幕,设计就会崩溃。如何解决这个问题?
可能的问题是:
<ListView
android:id="@+id/list_past_report"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>`
将layout_width="wrap_content"
替换为layout_width="match_parent"
我想你必须用这个更新你的主布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list_past_report"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></ListView> </LinearLayout>
并对适配器进行一些更改 class 也
public View getView(final int position, View convertView, ViewGroup parent) {
final Object[] id_obj=_id.toArray();
Object[] name_obj=c_name1.toArray();
Object[] mb_obj=m_no1.toArray();
Object[] eml_obj=email1.toArray();
...
Holder holder=new Holder();
View rowView;
rowView = inflater.inflate(R.layout.report_custom_list, null);
if(position%2==0)
rowView.setBackgroundColor(Color.YELLOW);
else
rowView.setBackgroundColor(Color.GRAY);
holder.tv=(TextView) rowView.findViewById(R.id.id);
holder.tv1=(TextView) rowView.findViewById(R.id.nm);
holder.tv2=(TextView) rowView.findViewById(R.id.mob);
...
if(position == 0){
holder.tv.setText("Title1");
holder.tv.setText("Title2");
holder.tv.setText("Title3");
....
}
else{
holder.tv.setText((CharSequence) id_obj[position]);
holder.tv1.setText((CharSequence) name_obj[position]);
holder.tv2.setText((CharSequence) mb_obj[position]);
...
}
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
return rowView;}
将列表视图 layout_width
更改为 fill_parent
android:layout_width="fill_parent"