自定义ListView设置XML中的Background Drawable不起作用

时间:2017-09-10 20:30:09

标签: android listview

我对此感到沮丧:

当我定义自定义ListView布局时,

Android Studio并没有保留我在那里设置的背景。

尝试了很多东西,并且以编程方式设置背景并不起作用

因为它忽略了必须设置为" wrap_content"的layout_width。

Actual style of background

Result without coding

如果有人能帮助我,我会非常感激!:)

编辑:

我正在创建一个Messenger,我希望以类似于WhatsApp的方式显示消息,其中消息显示在listView中。根据发送或接收的消息,项目应与ParentStart或ParentEnd对齐。

但更重要的是,如果邮件只包含几个字符,我不希望ListItem背景填满整个屏幕,因此应该动态设置。 我想我可以通过简单地在父布局文件中设置换行内容来实现这一点。

文件看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_alignParentEnd="true">

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentTop="true"
    android:layout_marginBottom="4dp"
    android:layout_marginTop="4dp"
    tools:background="@drawable/background_message_sent">

    //Here are TextViews

</LinearLayout>

</RelativeLayout>

这是我的ListViewAdapter,我设置了背景

(@ drawable / background_message_sent / received)以编程方式。

但是,无论消息长度如何,这都会覆盖ListView的整个宽度。

@Override
public View getView(int pos, View convertView, ViewGroup parent) {


    int currentUserID = 1;
    int senderID = messagesArrayList.get(pos).getSenderID();

    if (senderID == currentUserID){

        View v = View.inflate(context, R.layout.layout_chat_message_sent, null);
        v.setBackgroundResource(R.drawable.background_message_sent);
        TextView tvMessageText = v.findViewById(R.id.tvMessageText);
        TextView tvTimeStamp = v.findViewById(R.id.tvTimeStamp);

        tvMessageText.setText(messagesArrayList.get(pos).getMessageText());
        tvTimeStamp.setText(messagesArrayList.get(pos).getTimeStamp());
        return v;
    }
    else {
        View v = View.inflate(context, R.layout.layout_chat_message_received, null);
        v.setBackgroundResource(R.drawable.background_message_received);
        TextView tvMessageText = v.findViewById(R.id.tvMessageText);
        TextView tvTimeStamp = v.findViewById(R.id.tvTimeStamp);

        tvMessageText.setText(messagesArrayList.get(pos).getMessageText());
        tvTimeStamp.setText(messagesArrayList.get(pos).getTimeStamp());
        return v;

    }
}

1 个答案:

答案 0 :(得分:0)

好吧,经过尝试,我得到了解决方案,如果有人来到这一点:

您必须直接为每个TextView设置背景drawable,而不是为Parent Layouts设置。 这两条线终于解决了所有问题^^

android:maxEms="14" 
android:background="@drawable/background_message_sent"

        <TextView
        android:id="@+id/tvMessageText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_marginBottom="5dp"
        android:layout_marginEnd="0dp"
        android:layout_marginTop="5dp"
        android:layout_weight="0.22"
        android:text="42456456456546"
        android:textColor="@color/tentakelPrimary"
        android:maxEms="14"
        android:background="@drawable/background_message_sent"/>