gpt4 book ai didi

android - RecyclerView 网格布局管理器不居中项目

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:06 26 4
gpt4 key购买 nike

enter image description here

我继承了一些包含大量遗留代码的大项目,现在我面临着一些奇怪的事情..

我需要让这个屏幕有 recyclerview 和网格布局管理器,2 列。这就是我得到的。有没有办法将这些图标居中放置在屏幕中间?我尝试了重力,但没有任何效果。也许在所有遗留代码中存在某些问题,或者这只是 recyclerView 的问题?

这是项目的布局(糟糕,不要问..)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_view_controller_item_background"
android:orientation="vertical">

<TextView
android:id="@+id/textViewSceneKK"
android:layout_width="match_parent"
android:layout_height="@dimen/room_button_height"
android:layout_gravity="center"
android:layout_marginLeft="@dimen/row_filter_text_margin_left"
android:layout_marginRight="@dimen/row_filter_text_margin_left"
android:gravity="center"
android:shadowDx="-1"
android:shadowDy="-1"
android:shadowRadius="1"
android:textSize="@dimen/row_scene_kk_text_size" />

<TextView
android:id="@+id/textViewSceneName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/row_filter_text_margin_bottom"
android:layout_marginLeft="@dimen/row_filter_text_margin_left"
android:layout_marginRight="@dimen/row_filter_text_margin_left"
android:layout_marginTop="@dimen/row_filter_text_margin_top"
android:clickable="false"
android:gravity="center"
android:longClickable="false"
android:textColor="@color/main_text_color"
android:textSize="@dimen/row_browser_right_name_text_size" />
</LinearLayout>

<!--<View-->
<!--android:id="@+id/filterView"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent"-->
<!--android:clickable="false"-->
<!--android:longClickable="false" />-->

<View
android:id="@+id/filterViewClick"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:selectableItemBackground"
android:focusable="false"
android:focusableInTouchMode="false" />

和 fragment 的布局:

<customview.CustomRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none" />

还有代码:

 customRecyclerView.setHasFixedSize(false);
customRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
customRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(),
R.drawable.line_separator_empty, DividerItemDecoration.VERTICAL_LIST));

customRecyclerView.setAdapter(adapter);

CustomRecyclerView.java

public class CustomRecyclerView extends RecyclerView {

private boolean enableScroll = true;

public CustomRecyclerView(Context context) {
super(context);
}

public CustomRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CustomRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public boolean isEnableScroll() {
return enableScroll;
}

public void setEnableScroll(boolean enableScroll) {
this.enableScroll = enableScroll;
}

@Override
public int computeVerticalScrollRange() {
return super.computeVerticalScrollRange();
}


@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
if (enableScroll) {
return super.onInterceptTouchEvent(e);
}
return false;
}
}

最佳答案

您必须使用布局引力使其居中并且需要将匹配父项更改为 wrap_content,还必须分配布局引力运行时。试试这段代码:

适配器项布局:

 <?xml version="1.0" encoding="utf-8"?>             
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:id="@+id/top_header_rl"
android:background="@color/app_header_color"
android:orientation="vertical">

<TextView
android:id="@+id/textViewSceneKK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center"
android:shadowDx="-1"
android:shadowDy="-1"
android:shadowRadius="1"
android:text="Heder name"
android:textSize="26sp" />

<TextView
android:id="@+id/textViewSceneName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:clickable="false"
android:gravity="center"
android:text="Footer name"
android:longClickable="false"
android:textSize="25sp" />
</LinearLayout>

<!--<View-->
<!--android:id="@+id/filterView"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent"-->
<!--android:clickable="false"-->
<!--android:longClickable="false" />-->

<View
android:id="@+id/filterViewClick"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?android:selectableItemBackground"
android:focusable="false"
android:focusableInTouchMode="false" />


</FrameLayout>

适配器代码:

public class CenterGridView extends RecyclerView.Adapter<CenterGridView.CenterGridViewViewHolder> {

private Context context;
public CenterGridView(Context context){
this.context =context;
}

@Override
public CenterGridViewViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new CenterGridViewViewHolder(LayoutInflater.from(context).inflate(R.layout.new_tiem,parent,false));
}

@Override
public void onBindViewHolder(CenterGridViewViewHolder holder, int position) {

if(position%2==0){
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.RIGHT;
holder.top_header_rl.setLayoutParams(params);
}else{
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.LEFT;
holder.top_header_rl.setLayoutParams(params);
}
}

@Override
public int getItemCount() {
return 20;
}

class CenterGridViewViewHolder extends RecyclerView.ViewHolder{
private LinearLayout top_header_rl;
public CenterGridViewViewHolder(View itemView) {
super(itemView);
top_header_rl = (LinearLayout)itemView.findViewById(R.id.top_header_rl);
}
}
}

主要 Activity 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">

<com.demostudies.CustomRecyclerView
android:id="@+id/tests"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></com.demostudies.CustomRecyclerView>

</LinearLayout>

//设置适配器

 CustomRecyclerView customRecyclerView = (CustomRecyclerView)findViewById(R.id.tests);
customRecyclerView.setHasFixedSize(false);
customRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
customRecyclerView.setAdapter(new CenterGridView(this));

关于android - RecyclerView 网格布局管理器不居中项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43867049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com