【问题标题】:How to set the ListView Rows Height如何设置 ListView 行高
【发布时间】:2012-05-09 22:03:36
【问题描述】:

我正在向您展示下面的图像,其中行的高度不同我希望行的高度应该相同。

在我的程序中,我从我解析的 XML 服务获取数据并在列表视图上显示结果,但 ListView 行的高度不同。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:background="@drawable/list_selector"
  android:padding="3dip"
  android:layout_width="match_parent"
  android:gravity="center"
  android:layout_height="10dp">

    <TextView android:layout_height="wrap_content" android:text="ITEM"
        android:layout_width="wrap_content" android:id="@+id/txtItem"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textSize="15dip"
        android:textStyle="bold"
        android:textColor="#040404"></TextView>

    <TextView android:layout_height="wrap_content" android:text="MANUFACTURER"
        android:layout_width="wrap_content" android:id="@+id/txtItemTwo"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textSize="14dip"
        android:textColor="#FF7F50"

        ></TextView>


</LinearLayout>

我已经设置了高度

android:layout_height="10dp"

但在 listView 上显示时仍然不一样。

这是我为 getView 定制的适配器:-

 public class MyEventAdapter extends BaseAdapter {

     ArrayList < String > listTitle;
     ArrayList < String > listFullText;

     Activity activity;

     public MyEventAdapter(Activity activity, ArrayList < String > listTitle, ArrayList < String > listFullText) {
         super();
         this.listTitle = listTitle;
         this.listFullText = listFullText;

         this.activity = activity;
     }

     public int getCount() {
         // TODO Auto-generated method stub
         return listTitle.size();
     }

     public Object getItem(int position) {
         // TODO Auto-generated method stub
         return null;
     }

     public long getItemId(int position) {
         // TODO Auto-generated method stub
         return 0;
     }

     private class ViewHolder {
         TextView txtViewTitle;
         TextView txtViewTitleTwo;

     }

     public View getView(int position, View view, ViewGroup parent) {
         // TODO Auto-generated method stub

         ViewHolder title;
         LayoutInflater inflater = activity.getLayoutInflater();

         if (view == null) {
             view = inflater.inflate(R.layout.lview_row, null);
             title = new ViewHolder();

             title.txtViewTitle = (TextView) view.findViewById(R.id.txtItem);
             title.txtViewTitleTwo = (TextView) view.findViewById(R.id.txtItemTwo);

             view.setTag(title);
         } else {
             title = (ViewHolder) view.getTag();
         }

         title.txtViewTitle.setText(listTitle.get(position));
         title.txtViewTitleTwo.setText(listFullText.get(position));

         return view;
     }
 }

任何人都请我以正确的方式获得所需的结果。

提前致谢。

【问题讨论】:

  • 如果您使用的是自定义适配器,请从自定义适配器发布您的 getView 方法代码。
  • 你的实现应该可以工作,你必须在某处做其他事情:)。
  • 嗨 @BharatSharma 我刚刚发布了我的自定义适配器代码,请看一下谢谢...
  • 在你的代码上运行 lint,tools.android.com/tips/lint
  • 使用view.setMinimumHeight(minHeight); 在getView() 类的getView() 方法中设置视图的高度

标签: android android-layout android-listview baseadapter


【解决方案1】:

问题是你误用了inflator,不要给null作为根节点

如果你将null作为根节点传递,那么你在xml中设置的所有大小参数都不起作用

正确的代码是

view = inflater.inflate(R.layout.lview_row, parent, false);

http://www.doubleencore.com/2013/05/layout-inflation-as-intended/

【讨论】:

  • 尽管这有点道理,但这并不适用于所有情况。更好的答案需要更多的反省,因为提供的链接没有深入挖掘真正的问题
  • 有些项目被隐藏了请帮忙
【解决方案2】:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:background="@drawable/list_selector"
  android:padding="3dip"
  android:layout_width="match_parent"
  android:gravity="center"
  android:layout_height="match_parent">

    <TextView android:layout_height="wrap_content" android:text="ITEM"
        android:layout_width="wrap_content" android:id="@+id/txtItem"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textSize="15sp"
        android:textStyle="bold"
        android:textColor="#040404"></TextView>

    <TextView android:layout_height="wrap_content" android:text="MANUFACTURER"
        android:layout_width="wrap_content" android:id="@+id/txtItemTwo"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textSize="14sp"
        android:textColor="#FF7F50"

        ></TextView>


</LinearLayout>

如果您的文本中有不止一行,请将您的文本设置为单行,这样它就不会出现在第二行并改变每行的高度。

【讨论】:

    【解决方案3】:

    在MyEventAdapter 类中覆盖方法getView(int position, View convertView, ViewGroup parent) 并使用view.setMinimumHeight(minHeight); 设置最小视图高度。

    在方法 `getView(int position, View convertView, ViewGroup parent)' 中设置视图的最小高度如下:

    public View getView(int position, View convertView, ViewGroup parent) {
    
        ViewHolder title;
        LayoutInflater inflater = activity.getLayoutInflater();
    
        if (view == null) {
            view = inflater.inflate(R.layout.lview_row, null);
            view.setMinimumHeight(minHeight); //set minimum height of view here
            title = new ViewHolder();
    
            title.txtViewTitle = (TextView) view.findViewById(R.id.txtItem);
            title.txtViewTitleTwo = (TextView) view.findViewById(R.id.txtItemTwo);
    
            view.setTag(title);
        } else {
            title = (ViewHolder) view.getTag();
        }
    
        title.txtViewTitle.setText(listTitle.get(position));
        title.txtViewTitleTwo.setText(listFullText.get(position));
    
        return view;    
    }
    

    【讨论】:

      【解决方案4】:

      如果您的文本中有不止一行,请将您的文本设置为单行,这样它就不会出现在第二行并改变每行的高度。

      【讨论】:

        【解决方案5】:

        首先你应该使用 sp 来指定文本的大小而不是倾斜 (dp),其次我认为你有一些矛盾的尺寸你有 2 个 15 + 14 dp 的文本字段只有 10 dp 的布局。尝试将布局高度增加到 40 dp 并更改 textview 的尺寸以使用 sp

        【讨论】:

          猜你喜欢
          • 2010-11-17
          • 2014-11-10
          • 1970-01-01
          • 1970-01-01
          • 2012-11-29
          • 1970-01-01
          • 2012-11-22
          • 2012-11-14
          • 2011-04-04
          相关资源
          最近更新 更多