我对此感到沮丧:
当我定义自定义ListView布局时,
Android Studio并没有保留我在那里设置的背景。
尝试了很多东西,并且以编程方式设置背景并不起作用
因为它忽略了必须设置为" wrap_content"的layout_width。
如果有人能帮助我,我会非常感激!:)
编辑:
我正在创建一个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;
}
}
答案 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"/>