ListView 行被剪裁

ListView rows getting clipped

新手提醒

我正在用使用 ConstraintLayout 的行填充我的 ListView。我认为行高会根据内容自动调整,但这似乎并没有发生。应该吗?

我的片段代码:

public class ConversationListFragment extends ListFragment {
    public interface OnItemSelectedListener {
        public void onItemSelected(Conversation conversation);
    }

    OnItemSelectedListener selectionListener;

    @Override
    public void onCreate(Bundle savedInstance) {
        super.onCreate(savedInstance);

        Messaging controller = MessagingFactory.getInstance().getController();

        Conversation[] conversations = controller.amsConversations.getActiveConversations();
        setListAdapter(new ConversationListAdapter(getActivity(), conversations));
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        try {
            selectionListener = (OnItemSelectedListener) activity;
        } catch (ClassCastException e){
            throw new ClassCastException(activity.toString() + " must implement OnItemSelectedListener");
        }
    }

    public void onListItemClick(ListView l, View v, int position, long id) {
        Conversation conversation = (Conversation) getListAdapter().getItem(position);
        selectionListener.onItemSelected(conversation);
    }
}

我的适配器 getView 方法:

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.lpmessaging_ui_conversation_list_entry, parent, false);
        convertView.setMinimumHeight(105); // not helping

        viewHolder = new ViewHolder();
        viewHolder.remoteName = (TextView) convertView.findViewById(R.id.conversation_list_remote_name);
        viewHolder.lastMessage = (TextView) convertView.findViewById(R.id.conversation_list_last_message);
        viewHolder.unreadCount = (TextView) convertView.findViewById(R.id.conversation_list_unread_counter);

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    // set textView text here

    return convertView;
}

我的布局XML:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="8dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="8dp">


    <TextView
        android:id="@+id/conversation_list_remote_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:text="Brand Name"
        android:textAlignment="viewStart"
        android:textSize="17sp"
        app:layout_constraintBottom_toTopOf="@+id/horizontalGuideline"
        app:layout_constraintEnd_toStartOf="@+id/verticalGuideline"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_conversion_absoluteHeight="24dp"
        tools:layout_conversion_absoluteWidth="272dp" />

    <TextView
        android:id="@+id/conversation_list_last_message"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:text="Last Message"
        android:textAlignment="viewStart"
        app:layout_constraintEnd_toStartOf="@+id/verticalGuideline"
        app:layout_constraintStart_toStartOf="@+id/conversation_list_remote_name"
        app:layout_constraintTop_toTopOf="@+id/horizontalGuideline" />


    <TextView
        android:id="@+id/conversation_list_unread_counter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:background="@drawable/lpinfra_ui_scroll_down_unread_counter_shape"
        android:text="1"
        android:textColor="@color/scroll_down_indicator_unread_counter_text_color"
        android:textSize="@dimen/regular_text_size"
        app:layout_constraintTop_toTopOf="@+id/horizontalGuideline"
        app:layout_constraintBottom_toTopOf="@+id/horizontalGuideline"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/verticalGuideline"
        />

    <android.support.constraint.Guideline
        android:id="@+id/horizontalGuideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.5" />

    <android.support.constraint.Guideline
        android:id="@+id/verticalGuideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_end="45dp" />
</android.support.constraint.ConstraintLayout>

输出:

我试图在膨胀视图上设置最小高度,但它是以 SP 还是像素或点还是什么为单位?我尝试了 35 和 105 的值,但没有任何改变。

如何让我的 ListView 行大小合适?

与iOS 约束系统一样,您需要从容器视图的顶部到底部进行约束。 ConstraintLayout 中的 None 个对象对父对象的顶部或底部有约束。

添加一个从顶部 TextView 到父级的约束和一个从底部 TextView 到父级的约束,这将使 android 正确调整行的大小。