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

时间:2019-04-25 14:17:50

标签: android android-linearlayout

我想以编程方式在Android程序中为2 TextView设置Params,但是我遇到了问题。这是相关的代码段:

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及其相应的文本应显示在活动的右侧,而不是在活动的左侧的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();
        }
    }

Edit in app

仅该消息显示在右侧,但仍然不显示在屏幕的右侧。

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>

1 个答案:

答案 0 :(得分:2)

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

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

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

在您的情况下:

    如果您将TextView的宽度设置为WRAP_CONTENT
  1. 将起作用
  2. 如果您将TextView的宽度设置为MATCH_PARENT
  3. 将起作用

一种适合您的情况的方法:

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一起工作,所以语法可能不正确?抱歉,如果我错过了任何事情,您会得到图片...