【问题标题】:Android Inside Custom ListView, TextView Weight property not workingAndroid内部自定义ListView,TextView权重属性不起作用
【发布时间】:2016-01-25 16:22:09
【问题描述】:

我有一个自定义列表视图。 listview 数据是由一些 textview 为每一行水平设置的。在主布局中,我有相同数量的 textView 用于设置这些列的标题。我的问题是,主要布局与 weight 属性配合良好。但是包含 textview 的 listview 的自定义值设置布局不适用于 weight 属性。

主布局:(权重属性正常工作)

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

在我硬编码 textview 的宽度之前。但如果它进入不同的屏幕,设计就会崩溃。如何解决这个问题?

【问题讨论】:

    标签: android listview android-custom-view android-layout-weight


    【解决方案1】:

    问题可能是: ​​

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

    【讨论】:

      【解决方案2】:

      将列表视图 layout_width 更改为 fill_parent

      android:layout_width="fill_parent"
      

      【讨论】:

        【解决方案3】:

        我认为你必须用这个更新你的主布局文件

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

        并对 Adapter 类进行一些更改

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

        【讨论】:

        • 如果我再次这样做,我的标题也不会正确显示。它还会导致对齐问题
        • 使用列表视图宽度 = match_parent
        猜你喜欢
        • 2015-01-27
        • 2015-09-03
        • 1970-01-01
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-03
        相关资源
        最近更新 更多