1

まず、重複しているように聞こえたらすみません。非常に多くのスレッドにアクセスしましたが、問題の適切な答えが見つかりませんでした。親で ScrollingMovementMethod、android:scrollbar、wrap_content を試してみましたが、これらのスレッドで提案された他の多くのことを試しましたが、何もうまくいきませんでした。良いタイトルが見つからなかったので、自由にタイトルを編集してください。

問題の説明 リスト ビューがあり、リスト ビューの各行には 3 つのコントロールがあります。可能な場合は))。

私が試したこと:- 1. XML レイアウト、

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

    <ImageView
        android:id="@+id/icon"
        android:layout_width="22dp"
        android:layout_height="50dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="15dp"
        android:contentDescription="@string/strBuddyImage" >
    </ImageView>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:minHeight="56dp" >

        <TextView
            android:id="@+id/uNameTxt"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_above="@+id/customMsg"
            android:minHeight="?android:attr/listPreferredItemHeight"
            android:singleLine="true"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textSize="@dimen/fontSizeListRowHeader" />

        <TextView
            android:id="@+id/customMsg"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:maxLines="4"
            android:textSize="@dimen/fontSizeListRowText"
            android:textStyle="italic" />
    </RelativeLayout>

</LinearLayout>
  1. ArrayAdapter を拡張するアダプター (getView メソッドのみをオーバーライドします)

    static class ViewHolder { public ImageView imageView; public TextView uNameTxtView; public TextView custMsgTxtView; }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      View rowView = convertView;
      // Log.d("BuddyListAdapter", "Inside getView() " + position);
      if ( rowView == null ) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = inflater.inflate(R.layout.buddy_listview_row_layout, parent, false);
        viewHolder = new ViewHolder();
        viewHolder.uNameTxtView = (TextView) rowView.findViewById(R.id.uNameTxt);
        viewHolder.imageView = (ImageView) rowView.findViewById(R.id.icon);
        viewHolder.custMsgTxtView = (TextView) rowView.findViewById(R.id.customMsg);
        rowView.setTag(viewHolder);
      }
      viewHolder = (ViewHolder) rowView.getTag();
    
      synchronized (buddyList) {
        buddy = buddyList.get(position);
      }
      viewHolder.uNameTxtView.setText(buddy.getDisplayName());
      viewHolder.custMsgTxtView.setText(buddy.getCustomMessage());
    
      // Change the icon for users who are offline
      if ( buddy.getState() == 0 ) {
        viewHolder.imageView.setImageResource(R.drawable.offline);
      } else {
        viewHolder.imageView.setImageResource(R.drawable.online);
      }
      //      rowView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
      return rowView;
    }
    

私が得るもの ここに画像の説明を入力

同じサイズのリストビューのすべての行を表示したい のですが、誰かがより大きなステータスメッセージ (複数行が必要) を持っている場合は、その人の名前とステータスメッセージの最初の数行 (4 など) を表示したいと思います。 . ステータスメッセージがどれほど大きくても、名前は常にユーザーに表示される必要があります..どうすればできますか?

コードに他の間違いがあれば指摘してください。

4

2 に答える 2

1

私が気づいたことの1つは、ハードコードされたディメンションをたくさん使用していることです。それは本当に必要ですか?wrap_contentを使用することは、ほとんどのレイアウトでより適切な方法です。そうすれば、Androidに処理させることができます。質問に関する限り、次の2つのことができます。1)2つのEditTextが相対レイアウト内にあり、customMsgが4行の場合、スクロールされ、uNameTxtが失われるため、customMsgをさらに制限する必要があります。 、2行以下のようなものに。または、コードの一部を失っても問題がない場合は、この方法でレイアウトを調整できます

 <TextView
        android:id="@+id/uNameTxt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout_alignParentTop="true"
        android:minHeight="?android:attr/listPreferredItemHeight"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textSize="@dimen/fontSizeListRowHeader" />

    <TextView
        android:id="@+id/customMsg"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/uNameTxt"
        android:maxLines="4"
        android:textSize="@dimen/fontSizeListRowText"
        android:textStyle="italic" />

下にスクロールしなくなり、NameとcustomMsgの一部が表示されます。

2)レイアウトを次のようなより効率的なものに編集します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" 
 android:minHeight="56dp">

 <ImageView
    android:id="@+id/icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="15dp"
    android:contentDescription="sasd" >
</ImageView>

<TextView
        android:id="@+id/uNameTxt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:singleLine="true"
        android:layout_toRightOf="@+id/icon"
        android:textSize="@dimen/fontSizeListRowHeader"
        android:textAppearance="?android:attr/textAppearanceMedium"
    />

 <TextView
        android:id="@+id/customMsg"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/uNameTxt"
        android:maxLines="2"
        android:layout_toRightOf="@+id/icon"
        android:textSize="@dimen/fontSizeListRowText"
        android:textStyle="italic" />

</RelativeLayout>
于 2012-10-04T12:08:58.053 に答える
1

の使用について sokie に同意しますwrap_contentLinearLayoutさまざまなディスプレイサイズで一貫したレイアウトを提供するため、私はよく使用する傾向があります. 実装の 1 つの方法は次のとおりです。RelativeLayout内部をに置き換えるLinearLayoutと、名前を含むテキスト ビューが常に表示され、メッセージ テキスト ビューには可能な最大行が表示されます (または を指定して制限できますmaxLines)。ステータス メッセージ全体を表示したい場合は、親のLinearLayout高さパラメーターを に変更することで実現できますwrap_content

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="56dp" 
android:minHeight="?android:attr/listPreferredItemHeight">

<ImageView
    android:id="@+id/icon"
    android:layout_width="22dp"
    android:layout_height="50dp"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="15dp" >
</ImageView>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/uNameTxt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceMedium" 
        />

    <TextView
        android:id="@+id/customMsg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:maxLines="4"
        android:textStyle="italic"
       />
</LinearLayout>

</LinearLayout>
于 2012-10-04T12:32:19.017 に答える