以编程方式为 RecyclerView 中的项目设置引力 Android
Set gravity programmatically for item in RecycerView Android
我正在使用 RecyclerView Android 与 left/right 消息框进行聊天。我想将重力设置为 RecyclerView 的项目。通常,我将 itemView 转换为 LinearLayout,然后为其设置 ParamLayout 引力。但是如果是RecyclerView,投给LinearLayout好像不太对。它将 return RecyclerView.LayoutParams。因为:
LayoutParams subclass for children of RecyclerView. Custom layout
managers are encouraged to create their own subclass of this
LayoutParams class to store any additional required per-child view
metadata about the layout.
而且我找不到用 RecyclerView.LayoutParams 设置重力的方法:|
不管怎样,有人能在 RecyclerView 中找到引力项的方法吗?请推荐我。
------------POST 解决方案-----------------
//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;
}
问题已解决。
简单地说,我使用
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
而不是
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) holder.llGrandParent.getLayoutParams();
然后正常设置LinearLayout Params的gravity。
我通过在项目布局内的视图上设置重力来做到这一点。
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"。
我正在使用 RecyclerView Android 与 left/right 消息框进行聊天。我想将重力设置为 RecyclerView 的项目。通常,我将 itemView 转换为 LinearLayout,然后为其设置 ParamLayout 引力。但是如果是RecyclerView,投给LinearLayout好像不太对。它将 return RecyclerView.LayoutParams。因为:
LayoutParams subclass for children of RecyclerView. Custom layout managers are encouraged to create their own subclass of this LayoutParams class to store any additional required per-child view metadata about the layout.
而且我找不到用 RecyclerView.LayoutParams 设置重力的方法:| 不管怎样,有人能在 RecyclerView 中找到引力项的方法吗?请推荐我。
------------POST 解决方案-----------------
//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;
}
问题已解决。 简单地说,我使用
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
而不是
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) holder.llGrandParent.getLayoutParams();
然后正常设置LinearLayout Params的gravity。
我通过在项目布局内的视图上设置重力来做到这一点。
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"。