使用新的FirebaseRecyclerAdapter,如何在android中对齐传出和传入的文本,如whatsapp或facebook messenger?

时间:2018-06-08 16:10:57

标签: android android-layout android-recyclerview

P.S。编辑是否可以以编程方式对齐CardView?

我找到了旧的FirebaseRecyclerAdapter的一些解决方案,但它们无法正常工作。有什么建议吗?

我在java中使用了这个代码,来自旧的SO帖子,但没有影响

if (model.getReceiver() != "ADMIN")
                    holder.msgLinearLayout.setGravity(Gravity.LEFT | Gravity.START);
                else
                    holder.msgLinearLayout.setGravity(Gravity.RIGHT | Gravity.END);

这是聊天活动的布局,只有RecyclerView 以及用于编写和发送文本和图像的底部布局。

activity_chat.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ChatActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view2"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        ></android.support.v7.widget.RecyclerView>

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/photoPickerButton"
            android:layout_width="36dp"
            android:layout_height="36dp"
            android:background="@android:drawable/ic_menu_gallery" />

        <EditText
            android:id="@+id/messageEditText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1" />

        <Button
            android:id="@+id/sendButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:enabled="false"
            android:text="@string/send_button_label"/>

    </LinearLayout>

</LinearLayout>

这是我用于RecyclerView中每个条目的布局。 它有一个CardView,包含一个有一些TextView的LinearLayout。我问题可能在哪里?我应该在根目录中使用一些线性或相对布局吗?

chat_message_entry_layout.xml

    <android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardElevation="8dp"
    android:orientation="vertical"
    android:id="@+id/msgCardView"
    android:layout_margin="8dp">

    <LinearLayout
        android:id="@+id/msgLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/image"
            android:layout_width="200dp"
            android:layout_height="200dp"/>

        <TextView
            android:id="@+id/msg"
            android:textSize="20sp"
            android:layout_width="200dp"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/time"
            android:backgroundTint="#0e0d0e"
            android:layout_width="200dp"
            android:layout_height="wrap_content" />

    </LinearLayout>

</android.support.v7.widget.CardView>

1 个答案:

答案 0 :(得分:1)

有可能,但setGravity不是您正在寻找的。

您应该获得LayoutParams的{​​{1}}并对其进行适当的重视。

LinearLayout

请注意,FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) msgLinearLayout.getLayoutParams(); params.gravity = Gravity.LEFT; msgLinearLayout.setLayoutParams(params); 类型不是LayoutParams,而是LinearLayout.LayoutParams。这是因为FrameLayout.LayoutParamsgetLayoutParamsmsgLinearLayout)的封闭布局相关。 CardView正在扩展CardView,因此类型为FrameLayout

如果这对您没有帮助,我将需要更多有关您案例的数据。也许有一些预期效果的插图?现在看起来像什么