Параметры TextView в LinearLayout не работают программно - PullRequest
1 голос
/ 25 апреля 2019

Я хочу установить параметры для 2 TextView в моей программе Android программно, но у меня проблема. Это интересующий кусок кода:

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);
    }

Теперь проблема в том, цвет текста установлен, а гравитация - нет. Как я могу это исправить?

Текстовые киоски с соответствующим текстом должны отображаться справа, а не под текстом Питера слева от упражнения.

Это мой 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 Ответ

2 голосов
/ 25 апреля 2019

Трудно ответить, когда у нас нет макета для TextView, который должен быть в вашем ChatViewHolder.

Что я могу сказать о gravity, есть два типа gravity.

  1. Гравитация в LayoutParams равна layout_gravity в xml (макет для TextView)
  2. Гравитация в View равна gravity в xml (макет для детей внутри этого представления, в вашем случае: текст внутри TextView)

В вашем случае:

  1. будет работать, если у вас есть TextView как WRAP_CONTENT по ширине
  2. будет работать, если у вас есть 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);
}

Также установите TextViews на match_parent в вашем XML-файле

Я работаю с kotlin, поэтому синтаксис может быть неправильным? Извините, если я что-то пропустил, вы получите изображение ...

...