LinearLayout水平重力setGravity()无法以编程方式工作

时间:2019-12-31 06:30:16

标签: android android-linearlayout

我正在尝试使用conatiner.setGravity()通过代码设置linearlayout容器的重力。 但是它不起作用,但是当通过xml完成​​时它正在起作用。 下面是我的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/chat_container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="left"
    android:orientation="horizontal">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/messengerImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:maxWidth="24dp"
        android:maxHeight="24dp"
        android:padding="3dp"
        android:src="@drawable/bubble" />

    <TextView
        android:id="@+id/messageTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="2dp"
        android:layout_marginEnd="85dp"
        android:background="@drawable/rounded_edittext"
        android:fontFamily="monospace"
        android:maxWidth="250sp"
        android:padding="8dp"
        android:textColor="@android:color/black"
        android:textSize="14sp" />

    <ImageView
        android:id="@+id/message_fav"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_gravity="center_vertical"
        android:clickable="true"
        android:src="@drawable/chat_message_fav_selector"
        tools:ignore="ContentDescription" />

</LinearLayout>

使用的代码是:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(0, 0, 0, 0);
lp.gravity = Gravity.RIGHT;
holder.container.setLayoutParams(lp);

这是一个聊天应用程序,用于在其他人发送消息时将容器设置为左侧,而在用户发送消息时将容器设置为右侧。

3 个答案:

答案 0 :(得分:1)

尝试

chat_container wrap_content的宽度更改为match_parent

     android:layout_width="match_parent"

记住重力仅在父布局中有多余空间的情况下起作用。

答案 1 :(得分:0)

尝试:

lp.setGravity(Gravity.CENTER)

答案 2 :(得分:0)

在xml代码中,您为Linearlayout设置layout_gravity =“ left”。 但是在Java代码中,您尝试设置重力。 重力和layout_gravity不同。 在Java代码中,您可以执行以下操作来设置重力:

LinearLayout linearLayout = findViewById(R.id.linearlayout);
    linearLayout.setGravity(Gravity.LEFT);