2017-05-09 125 views
1

enter image description hereRecyclerView網格佈局管理器不居中項目

我繼承了一些大的項目有很多的遺留代碼,現在我面臨着一些奇怪的東西..

我需要這個畫面有具有網格佈局管理器的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't佈局:

<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; 
    } 
} 
+0

顯示xml和代碼。檢查recyclerview的寬度必須_match_parent_ – Piyush

+0

顯示一些代碼和recyclerview包含佈局 – Pavan

+0

使_customRecyclerView.setHasFixedSize(true); _也顯示_CustomRecyclerView_類 – Piyush

回答

2

你必須使用佈局重心,使其中心&需要改變比賽,家長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));