Android 更改recyclerview中第一个可见项的边距
如何使用卡片更改水平回收视图上第一个完整可见项目的边距(底部为20 dp)?我只能得到第一个完整可见项的索引,但不能得到对视图的任何引用Android 更改recyclerview中第一个可见项的边距,android,android-recyclerview,margin,selecteditem,Android,Android Recyclerview,Margin,Selecteditem,如何使用卡片更改水平回收视图上第一个完整可见项目的边距(底部为20 dp)?我只能得到第一个完整可见项的索引,但不能得到对视图的任何引用 mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
firstVisibleItem = lm.findFirstCompletelyVisibleItemPosition();
View view= mRecyclerView.getChildAt(firstVisibleItem);
RelativeLayout.LayoutParams lp= new RelativeLayout.LayoutParams(300, 150);
lp.setMargins(0, 0, 0, 20);
view.setLayoutParams(lp);
}
});
假设
视图
包含对要更改其边距的视图的引用,可以使用以下方法将底部边距设置为20像素:
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(0, 0, 0, 20);
view.setLayoutParams(lp);
请注意,这会将底部边距更改为20像素,而不是20dp。您需要将20dp值转换为像素。这将是一个很好的地方来看看如何转换可以做到
您可能还需要更改LinearLayout.LayoutParams的构造函数上的高度和宽度参数,以满足您的需要
如果问题是获取对视图的引用,那么发布一些代码会很有帮助
编辑/更新
代码起了作用。我不认为您正在设置对所需视图的访问权限。以下是另一种方法:
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// Find the adapter position of the first fully visible item
// May return RecyclerView.NO_POSITION that is not handled here.
firstVisibleItem = lm.findFirstCompletelyVisibleItemPosition();
// Find the corresponding view holder for this position.
// MyViewHolder should already be defined (just don't know the name).
MyViewHolder vh = (MyViewHolder) mRecyclerView
.findViewHolderForAdapterPosition(firstVisibleItem);
// Get the layout parameters from the top-level item of this view.
// This could also be another view captured within the view holder.
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) vh.itemView.getLayoutParams();
// Make our changes and set them.
lp.setMargins(0, 0, 0, 50);
vh.itemView.setLayoutParams(lp);
}
});
首先,如果您正在更改RecyclerView中的布局或非常特定的项,则可能没有正确地设计布局。您最好执行以下操作:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="20dp"/>
<android.support.v7.widget.RecyclerView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
我试图用view=mRecyclerView.getChildAt(firstVisibleItem)获取视图;并使用margin lp.setMargins(0,0,0,20)设置布局参数;但是没有工作有我的代码,我编辑了它..这与你在onscroll Methods of recycleview中的建议相同,lm是recycleview的布局管理器,但什么都没有发生,请帮助..我需要一个非常像野外旅行应用程序的界面
@Override
public void onBindViewHolder(ViewHolder holder,
@SuppressLint("RecyclerView") final int position) {
}