2017-05-09 3 views
1

enter image description hereRecyclerView Raster-Layout-Manager Zentrum nicht Artikel

ich etwas großes Projekt mit einer Menge von Legacy-Code geerbt und nun einige seltsame Sachen, die ich bin vor ..

Ich brauche diesen Bildschirm zu machen Recyclerview mit Grid Layout Manager, 2 Spalten. Das ist was ich bekomme. Gibt es eine Möglichkeit, diese Symbole in der Mitte des Bildschirms zu zentrieren? Ich habe es mit der Schwerkraft versucht, aber nichts funktioniert. Vielleicht gibt es irgendwas in diesem alten Code, der Probleme verursacht, oder das ist nur das Problem von recyclerView?

Dies ist das Layout des Artikels (schrecklich, fragen Sie nicht ..)

<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" /> 

Und fragment't Layout:

<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" /> 

und den Code:

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

Zeige XML und Code. Überprüfen Sie RecyclerView Breite muss _match_parent_ – Piyush

+0

zeigen Sie einige Code-und die Recyclerview mit Layout – Pavan

+0

Make _customRecyclerView.setHasFixedSize (true); _ Auch zeigen _CustomRecyclerView_ Klasse – Piyush

Antwort

2

Sie haben das Layout der Schwerkraft zu verwenden, um es Mitte zu machen & Notwendigkeit Spiel-Eltern zu verändern, wrap_content auch müssen Sie das Layout Schwerkraft Laufzeit zuweisen. versuchen, diesen Code:

Adapter Artikel Layout:

<?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> 

Adapter Code:

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); 
       } 
      } 
     } 

Hauptaktivität Layout:

<?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> 

// Set Adapter

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