LinearLayout 中的 TextView 参数无法以编程方式工作

TextView Params in LinearLayout not work programmatically

我想在我的 Android 程序中以编程方式为 2 个 TextView 设置参数,但我遇到了问题。这是一段感兴趣的代码:

private void setChatItemStyle(Boolean mineMsg, ChatViewHolder holder) {

        if(mineMsg) {
            holder.params.gravity = Gravity.END;
            holder.autore.setTextColor(Color.BLUE);
        }else{
            holder.params.gravity = Gravity.START;
            holder.autore.setTextColor(Color.MAGENTA);
        }

        holder.autore.setLayoutParams(holder.params);
        holder.messaggio.setLayoutParams(holder.params);
    }

现在的问题是;设置了文本的颜色,但没有设置重力。 我该如何解决?

TextView Cioscos 及其各自的文本应显示在右侧,而不是 activity 左侧的 Peter 文本下方。

这是我的 ChatViewHolder:

public class ChatViewHolder extends RecyclerView.ViewHolder {

        TextView autore, messaggio;
        LinearLayout.LayoutParams params;

        public ChatViewHolder(View itemView) {
            super(itemView);

            autore = itemView.findViewById(R.id.tv_autore);
            messaggio = itemView.findViewById(R.id.tv_messaggio);
            params = (LinearLayout.LayoutParams) autore.getLayoutParams();
        }
    }

只有消息向右移动,但它仍然不向屏幕右侧移动。

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="wrap_content"
    android:orientation="vertical"
    android:visibility="visible">

    <TextView
        android:id="@+id/tv_autore"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:text="Autore"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="24sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tv_messaggio"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Messaggio" />
</LinearLayout>

当我们没有 TextView 的布局时很难回答,它应该在您的 ChatViewHolder 中。

关于gravity我能说的是,gravity有两种类型。

  1. LayoutParams 中的重力等于 xml 中的 layout_gravityTextView 的布局)
  2. View 中的重力等于 xml 中的 gravity(此视图内的儿童布局,在您的情况下:TextView 内的文本)

你的情况:

  1. 如果您的 TextView 宽度为 WRAP_CONTENT
  2. 将有效
  3. 如果您的 TextView 的宽度 MATCH_PARENT 有效,

针对您的情况的一种方法:

private void setChatItemStyle(Boolean mineMsg, ChatViewHolder holder) {

    int gravity = Gravity.START;
    if (mineMsg) {
        gravity = Gravity.END;
        holder.autore.setTextColor(Color.BLUE);
    } else {
        holder.autore.setTextColor(Color.MAGENTA);
    }

    holder.autore.setGravity(gravity);
    holder.messaggio.setGravity(gravity);
}

同时在您的 xml 文件中将 TextViews 设置为 match_parent

我使用 kotlin,所以语法可能有误?对不起,如果我遗漏了什么,你会得到照片...