2017-05-09 25 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

レイアウトを含むコードとリサイクルビューを表示する – Pavan

+0

_customRecyclerView.setHasFixedSize(true); _も表示する_CustomRecyclerView_クラス – Piyush

答えて

2

あなたはそれはあなたがレイアウト重力ランタイムを割り当てる必要があり、また、wrap_contentするには、match-親を変更する必要が&を中心にするために、レイアウトの重力を使用する必要があります。このコードを試してみてください。

アダプタ項目のレイアウト:

<?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)); 
関連する問題