我使用RecyclerView
来显示我的数据集的元素。一切似乎都很完美,除了我有两种不同类型的项目,我希望改变每种类型的边距,以强调这种微小的差异。
为此,我使用了适配器的viewtype,但getLayoutParams()
中的onCreateViewHolder(ViewGroup parent, int viewType)
似乎没有给出我需要修改的正确参数。从头开始动态地重建这个参数(包括所有阴影和没有阴影)似乎没有道理。
这是我的代码:
private final static int TYPE1= 1;
private final static int TYPE2= 2;
@Override
public int getItemViewType(int position) {
if(data_set.get(position).isType1()) {
return TYPE1;
}
return TYPE2;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
int margin = parent.getContext().getResources().getDimensionPixelSize(R.dimen.end_margin);
if(viewType == TYPE1)
{
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) parent.getLayoutParams();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
params.setMarginStart(margin);
}else{
params.setMargins(margin,0,0,0);
}
v.setLayoutParams(params);
}
return new ViewHolder(v);
}
和heres我的xml for item_layout
<android.support.v7.widget.CardView
android:id="@+id/item_card"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:foreground="?android:attr/selectableItemBackground"
android:orientation="vertical"
card_view:cardElevation="@dimen/cardview_default_elevation"
android:clickable="true"
card_view:cardCornerRadius="3dp"
android:nestedScrollingEnabled="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutDirection="rtl"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/img_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true" />
<TextView
android:id="@+id/tv_contact_name"
android:gravity="end"
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</android.support.v7.widget.CardView>
非常感谢您提供的任何指导。
答案 0 :(得分:1)
当你调用parent.getLayoutParams();你正在从recyclerview获得params。
如果你想让你的xml文件中的LinearLayout参数给它一个id,并在你的代码中检索它。所以像这样:
LinearLayout myLayout = v.findViewById(R.id.mylinearlayout);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
//do something with parameters
myLayout.setLayoutParams(params);
答案 1 :(得分:0)
RecyclerView
的工作情况。
无论如何,我通过获取parent.getParent()
的{{1}}并在修改后将其设置为视图来解决此问题。
这是修改后的代码:
CardView.LayoutParams