私は多くのレガシーコードを含むいくつかの大きなプロジェクトを継承しましたが、今はいくつかの奇妙なことに直面しています。
この画面にグリッドレイアウトマネージャー、2列のrecyclerviewを表示する必要があります。これは私が得るものです。これらのアイコンを画面の中央に配置する方法はありますか?重力で試しましたが、何も機能しません。たぶん、問題を引き起こしているすべてのレガシーコードの中に何かがあるのでしょうか、それともこれは単に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" />
そしてフラグメントのレイアウト:
<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;
}
}
レイアウトグラビティを使用して中央に配置し、match-parentを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);
}
}
}
主なアクティビティのレイアウト:
<?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));