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
有两种类型。
LayoutParams
中的重力等于 xml 中的 layout_gravity
(TextView
的布局)
View
中的重力等于 xml 中的 gravity
(此视图内的儿童布局,在您的情况下:TextView
内的文本)
你的情况:
- 如果您的
TextView
宽度为 WRAP_CONTENT
, 将有效
- 如果您的
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,所以语法可能有误?对不起,如果我遗漏了什么,你会得到照片...
我想在我的 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
有两种类型。
LayoutParams
中的重力等于 xml 中的layout_gravity
(TextView
的布局)View
中的重力等于 xml 中的gravity
(此视图内的儿童布局,在您的情况下:TextView
内的文本)
你的情况:
- 如果您的
TextView
宽度为WRAP_CONTENT
, 将有效
- 如果您的
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,所以语法可能有误?对不起,如果我遗漏了什么,你会得到照片...