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>
答案 0 :(得分:1)
有可能,但setGravity
不是您正在寻找的。 p>
您应该获得LayoutParams
的{{1}}并对其进行适当的重视。
LinearLayout
请注意,FrameLayout.LayoutParams params =
(FrameLayout.LayoutParams) msgLinearLayout.getLayoutParams();
params.gravity = Gravity.LEFT;
msgLinearLayout.setLayoutParams(params);
类型不是LayoutParams
,而是LinearLayout.LayoutParams
。这是因为FrameLayout.LayoutParams
与getLayoutParams
(msgLinearLayout
)的封闭布局相关。 CardView
正在扩展CardView
,因此类型为FrameLayout
。
如果这对您没有帮助,我将需要更多有关您案例的数据。也许有一些预期效果的插图?现在看起来像什么