我正在使用RecyclerView Android与左/右消息框建立聊天行。我想将重力设置为RecyclerView的项目。通常情况下,我将itemView转换为LinearLayout,然后为它设置ParamLayout重力。但是如果使用RecyclerView,似乎不适合强制转换为LinearLayout。它将返回RecyclerView.LayoutParams。因为:
RecyclerView子级的LayoutParams子类。自定义布局 鼓励管理者创建自己的子类 LayoutParams类,用于存储任何其他所需的每子视图 有关布局的元数据。
我无法通过RecyclerView.LayoutParams找到设定重力的方法:| 无论如何,任何人都可以在RecyclerView中找到重力项目的方法吗?请建议我。
----------- POST SOLUTION ------------------
// 1。 RecyclerView的孩子们
<LinearLayout
android:id="@+id/id_grandparent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:divider="@android:color/transparent"
android:gravity="left"
android:orientation="vertical">
<LinearLayout
android:id="@+id/id_llparent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_customer_feedback_left"
android:gravity="left"
android:orientation="vertical">
</LinearLayout>
// 2。 OnBindView()
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params = setLayoutParamsForParent(params, item.isPosition());
holder.llParentLayout.setLayoutParams(params); //corresponding to id_llparent ID
// 3。
private LinearLayout.LayoutParams setLayoutParamsForParent(LinearLayout.LayoutParams params, boolean position) {
params.gravity = position ? Gravity.RIGHT : Gravity.LEFT;
return params;
}
答案 0 :(得分:7)
问题解决了。 简单地说,我使用
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
而不是
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) holder.llGrandParent.getLayoutParams();
然后通常为LinearLayout Params设置重力。
答案 1 :(得分:2)
我是通过在项目布局内的视图上设置重力来实现的。
LinearLayout.LayoutParams paramsMsg = new LinearLayout.
LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
if (position%2 == 0){
holder.bodyView.setBackgroundResource(R.drawable.outgoing_messages);
paramsMsg.gravity = Gravity.END;
} else {
holder.bodyView.setBackgroundResource(R.drawable.incoming_messages);
holder.bodyView.setTextColor(0xf08888);
paramsMsg.gravity = Gravity.START;
}
holder.bodyView.setLayoutParams(paramsMsg);
bodyView是项目布局中的TextView,项目宽度为“match_parent”。