如何将第三列添加到交错网格中

时间:2017-03-24 06:58:36

标签: android

我是android的新手......我在两列的github上找到了交错的网格,但我需要在交错的网格中添加另一列....所以如何添加?请帮忙

主要活动:

package com.grafixartist.masonry;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

Toolbar mToolbar;
RecyclerView mRecyclerView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mToolbar = (Toolbar) findViewById(R.id.toolbar);

    if (mToolbar != null) {
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Staggered Grid");
    }

    mRecyclerView = (RecyclerView) findViewById(R.id.masonry_grid);
    mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,    StaggeredGridLayoutManager.VERTICAL));

    MasonryAdapter adapter = new MasonryAdapter(this);
    mRecyclerView.setAdapter(adapter);
    SpacesItemDecoration decoration = new SpacesItemDecoration(16);
    mRecyclerView.addItemDecoration(decoration);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

Masonary Adapter:

package com.grafixartist.masonry;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

 /**
  * Created by Suleiman on 26-07-2015.
  */
        public class MasonryAdapter extends     RecyclerView.Adapter<MasonryAdapter.MasonryView> {

private Context context;

int[] imgList = {R.drawable.two, R.drawable.one, R.drawable.three, R.drawable.four,
        R.drawable.five, R.drawable.six, R.drawable.seven, R.drawable.eight,
        R.drawable.nine, R.drawable.ten};

String[] nameList = {"One", "Two", "Three", "Four", "Five", "Six",
        "Seven", "Eight", "Nine", "Ten"};

public MasonryAdapter(Context context) {
    this.context = context;
}

@Override
public MasonryView onCreateViewHolder(ViewGroup parent, int viewType) {
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_item, parent, false);
    MasonryView masonryView = new MasonryView(layoutView);
    return masonryView;
}

@Override
public void onBindViewHolder(MasonryView holder, int position) {
    holder.imageView.setImageResource(imgList[position]);
    holder.textView.setText(nameList[position]);
}

@Override
public int getItemCount() {
    return nameList.length;
}

class MasonryView extends RecyclerView.ViewHolder {
    ImageView imageView;
    TextView textView;

    public MasonryView(View itemView) {
        super(itemView);

        imageView = (ImageView) itemView.findViewById(R.id.img);
        textView = (TextView) itemView.findViewById(R.id.img_name);

    }
}
}

SpacesItemDecoration:

package com.grafixartist.masonry;

import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;

 /**
  * Created by Suleiman on 26-07-2015.
   */
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private final int mSpace;

public SpacesItemDecoration(int space) {
    this.mSpace = space;
}

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    outRect.left = mSpace;
    outRect.right = mSpace;
    outRect.bottom = mSpace;

    // Add top margin only for the first item to avoid double space between items
    if (parent.getChildAdapterPosition(view) == 0)
        outRect.top = mSpace;
}
}

activity_main.xml中:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/quickreturn_coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">

   <android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

      </android.support.design.widget.AppBarLayout>


      <android.support.v7.widget.RecyclerView
        android:id="@+id/masonry_grid"
       android:layout_width="match_parent"
        android:layout_height="match_parent"
         app:layout_behavior="@string/appbar_scrolling_view_behavior" />

     </android.support.design.widget.CoordinatorLayout>

grid_items.xml:

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="wrap_content"
      android:layout_height="wrap_content"
     android:background="@android:color/white"
        android:orientation="vertical">

<ImageView
    android:id="@+id/img"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="centerCrop" />

<TextView
    android:id="@+id/img_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:padding="8dp" />

    </LinearLayout>

输出:

Output

但我想再添加一列到交错网格,如下所示:

This is what i want

1 个答案:

答案 0 :(得分:0)

试试这个: -

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,    StaggeredGridLayoutManager.VERTICAL));

更改为

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,    StaggeredGridLayoutManager.VERTICAL));