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"