1

首先,如果听起来重复,请原谅。我访问了这么多线程,但找不到适合我的问题的答案。我已经尝试过父级中的 ScrollingMovementMethod、android:scrollbar、wrap_content 以及这些线程中建议的许多其他内容,但对我没有任何帮助。随意编辑标题,因为我找不到更好的标题。

问题描述 我有一个列表视图,列表视图的每一行都有三个控件 1. Image View(显示联系人图像) 2. TextView(显示联系人姓名) 3. TextView(显示联系人的状态消息(如果可供使用的话))。

我尝试过的:- 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 方法)

    静态类 ViewHolder { public ImageView imageView; 公共文本视图 uNameTxtView;公共文本视图 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

我注意到的一件事是你使用了很多硬编码的尺寸,这真的有必要吗?在大多数布局上使用 wrap_content 会是更好的做法,这样你就可以让 android 处理它。就你的问题而言,你可以做两件事:1)你的两个 EditTexts 在一个相对的布局中,如果 customMsg 是 4 行长,它将被滚动,你会失去你的 uNameTxt 所以你应该限制 customMsg 更多,到两行或更少的东西。或者,如果您同意丢失部分代码,您可以通过这种方式调整布局

 <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_content. 我倾向于使用LinearLayout很多,因为它在各种显示尺寸上提供了一致的布局。一种实现方式如下。通过将您的内部替换RelativeLayoutLinearLayout,将始终显示包含名称的文本视图,并且消息文本视图将显示最大可能的行(或可以通过指定 来限制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 回答