web-dev-qa-db-ja.com

ListViewの行の高さを設定する方法

下の画像では、行の高さが同じではありませんが、行の高さを同じにする必要があります。

enter image description here

私のプログラムでは、XMLサービスからデータを取得して解析し、リストビューに結果を表示していますが、リストビュー行の高さは同じではありません。

<?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で表示する場合は同じではありません。

これはgetVieewのカスタムアダプタです。

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

誰もが希望する結果を得るための適切な方法を教えてください。

前もって感謝します。

39
user755278

問題は、インフレータを誤って使用していることです。ルートノードとしてnullを与えないでください

ルートノードとしてnullを渡すと、xmlで設定したすべてのサイズパラメーターが機能しません

正しいコードは

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

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

138
clever

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;    
}
1
Ravi1187342
<?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>

テキストに複数の行がある場合は、テキストを1行に設定して、2行目に来ないようにし、各行の高さを変更します。

1
Bharat Sharma

テキストに複数の行がある場合は、テキストを1行に設定して、2行目に来ないようにし、各行の高さを変更します。

0
胡天宇