我正在app中创建一个信使功能,并希望根据持有者传递的某些值来更改布局重力(必须是START或END)。一切都很好,除了重力。所有持有人都在START设置。有没有解决方案?
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Message message = mMessageList.get(position);
if(message.getSender().equals("System")){
holder.content.setBackgroundResource(R.drawable.message_bubble_out);
holder.content.setTextColor(Color.parseColor("#000000"));
holder.messageLayout.setGravity(Gravity.END);
}
holder.content.setText(message.getContent());
}
消息布局XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/message_wrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/message_content"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:background="@drawable/message_bubble_out"
android:text="Hi, rangertS!"
android:textColor="#FFFFFF" />
</LinearLayout>
messageLayout定义:
messageLayout = (LinearLayout) view.findViewById(R.id.message_wrapper);
答案 0 :(得分:1)
好的,既然您已经为我们提供了详尽的解释,我想我知道答案。
似乎重力不应该归咎于此......正如我所说,你的约束逻辑是重点。
这里真正的罪魁祸首是你布局消息布局的方式。我们来看看下面指出的几行:
<LinearLayout
android:id="@+id/message_wrapper"
android:layout_width="wrap_content" <--- Use match_parent instead
android:layout_height="wrap_content"
android:layout_gravity="end"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/message_content"
android:layout_width="250dp" <--- Use wrap_content instead
android:layout_height="wrap_content"
android:background="@drawable/message_bubble_out"
android:text="Hi, rangertS!"
android:textColor="#FFFFFF" />
</LinearLayout>
您可以在我上面给出的带注释的代码段中看到问题的两个根本原因。让我们再详细说明一下:
您正在宣布LinearLayout
宽度为wrap_content
,这意味着重力永远不会在此发挥作用。为什么?好吧,因为布局总是与其内容完全相同!尽量让LinearLayout
宽度与其父级一样宽,然后您就会看到重力的影响。
你的TextView
的250dp,至少来自我的POV,有点太大了。有一点理由让TextView
大于它所包含的实际文本。请尝试在此处使用wrap_content。
希望这有帮助! :)