2016-03-04 248 views
0

我試圖在我的應用程序中添加RecyclerViewGridLayoutManager。一切都按預期工作,唯一的問題是看起來列是左對齊的,而不是中心對齊。有任何想法嗎?提前致謝!帶GridLayoutManager的RecyclerView左對齊視圖

這裏是一個圖像顯示它的外觀:

sdfs

這裏是單個項目的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:background="?android:selectableItemBackgroundBorderless" 
    android:clickable="true" 
    android:gravity="center_horizontal" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/iconSpot" 
     android:layout_width="48dp" 
     android:layout_height="48dp" 
     android:layout_gravity="center_horizontal" 
     android:src="@drawable/ic_launcher" 
     tools:ignore="MissingPrefix" /> 

    <TextView 
     android:id="@+id/textLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Dummy Text" 
     android:textSize="16sp" /> 

</LinearLayout> 

這裏是充滿活動佈局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/totalScreen" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignTop="@+id/fab" 
    android:layout_gravity="bottom|center" 
    android:gravity="bottom|center_vertical"> 

    <TextView 
     android:id="@+id/sheetTitle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#424242" 
     android:padding="12dp" 
     android:text="Dummy Title" 
     android:textSize="18sp" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignTop="@+id/sheetTitle" 
     android:layout_marginEnd="20dp" 
     android:layout_marginTop="-28dp" 
     android:visibility="gone" 
     app:fabSize="normal" /> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/gridScreen" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/sheetTitle" 
     android:background="#424242" 
     android:gravity="bottom|center" 
     android:layout_gravity = "center" 
     android:orientation="vertical" 
     android:paddingBottom="24dp" /> 

</RelativeLayout> 
+0

你也可以顯示你的佈局文件 – Inducesmile

+0

好吧,剛剛更新OP。希望這有助於 –

回答

2

好的!我想通了,它最終是因爲我需要將項目佈局寬度設置爲match_parent而不是wrap_content。因此,它看起來像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:layout_margin="10dp" 
    android:background="?android:selectableItemBackgroundBorderless" 
    android:clickable="true" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/iconSpot" 
     android:layout_width="44dp" 
     android:layout_height="44dp" 
     android:layout_gravity="center_horizontal" 
     android:src="@drawable/ic_launcher" 
     tools:ignore="MissingPrefix" /> 

    <TextView 
     android:id="@+id/textLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Dummy Text" 
     android:textSize="16sp" /> 

</LinearLayout> 
1

從項目佈局ne開始,僅使用佈局文件很難解決編輯充氣並附加到主佈局,以查看結果。

所以我決定重新創建它。我修改了你的佈局文件。

項目佈局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:background="@color/colorPrimary" 
android:layout_margin="2dp" 
android:clickable="true" 
android:orientation="vertical"> 

<ImageView 
    android:id="@+id/iconSpot" 
    android:layout_width="48dp" 
    android:layout_height="48dp" 
    android:layout_gravity="center_horizontal" 
    android:src="@android:drawable/ic_delete" 
    tools:ignore="MissingPrefix" /> 

<TextView 
    android:id="@+id/textLabel" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:text="Dummy Text" 
    android:textSize="16sp" /> 

</LinearLayout> 

主要業務佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/totalScreen" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_alignTop="@+id/fab" 
android:layout_gravity="bottom|center" 
android:gravity="bottom|center_vertical"> 

<TextView 
    android:id="@+id/sheetTitle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#424242" 
    android:padding="12dp" 
    android:text="Dummy Title" 
    android:textSize="18sp" /> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/gridScreen" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/sheetTitle" 
    android:background="#424242" 
    android:gravity="bottom|center" 
    android:layout_gravity = "center" 
    android:clipToPadding="false" 
    android:orientation="vertical" 
    android:paddingBottom="24dp" /> 

</RelativeLayout> 

主要活動類。用於項目餘量由此類(GridSpacingItemDecoration)從here複製

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.GridLayoutManager; 
import android.support.v7.widget.RecyclerView; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

private GridLayoutManager layout; 

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

    layout = new GridLayoutManager(MainActivity.this, 2); 

    RecyclerView rView = (RecyclerView)findViewById(R.id.gridScreen); 
    rView.setHasFixedSize(true); 
    rView.setLayoutManager(layout); 

    int spanCount = 2; 
    int spacing = 50; 
    boolean includeEdge = true; 
    rView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge)); 

    RecyclerViewAdapter rcAdapter = new RecyclerViewAdapter(MainActivity.this, getAllItemList()); 
    rView.setAdapter(rcAdapter); 
} 

private List<ItemObject> getAllItemList(){ 

    List<ItemObject> allItems = new ArrayList<ItemObject>(); 
    allItems.add(new ItemObject(android.R.drawable.ic_delete, "United")); 
    allItems.add(new ItemObject(android.R.drawable.ic_delete, "United")); 
    allItems.add(new ItemObject(android.R.drawable.ic_delete, "United")); 
    allItems.add(new ItemObject(android.R.drawable.ic_delete, "United")); 
    allItems.add(new ItemObject(android.R.drawable.ic_delete, "United")); 
    allItems.add(new ItemObject(android.R.drawable.ic_delete, "United")); 
    return allItems; 
} 

} 

RecycleView適配器類別

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

import java.util.List; 

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> { 

private List<ItemObject> itemList; 
private Context context; 

public RecyclerViewAdapter(Context context, List<ItemObject> itemList) { 
    this.itemList = itemList; 
    this.context = context; 
} 

@Override 
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) { 

    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list, null); 
    RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView); 
    return rcv; 
} 

@Override 
public void onBindViewHolder(RecyclerViewHolders holder, int position) { 
    holder.displayedImage.setImageResource(itemList.get(position).getImage()); 
    holder.textTitle.setText(itemList.get(position).getTitle()); 

} 

@Override 
public int getItemCount() { 
    return this.itemList.size(); 
} 
} 

ViewHolder類

import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 


public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener{ 

public ImageView displayedImage; 
public TextView textTitle; 

public RecyclerViewHolders(View itemView) { 
    super(itemView); 
    itemView.setOnClickListener(this); 
    displayedImage = (ImageView)itemView.findViewById(R.id.iconSpot); 
    textTitle = (TextView)itemView.findViewById(R.id.textLabel); 
} 

@Override 
public void onClick(View view) { 

} 

}

ObjectEntity類

public class ItemObject { 

private int image; 
private String title; 

public ItemObject(int image, String title) { 
    this.image = image; 
    this.title = title; 
} 

public int getImage() { 
    return image; 
} 

public void setImage(int image) { 
    this.image = image; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 
} 

結果如下。試試看看它是否適合你。

enter image description here

+0

哇!我首先想表達感謝在這方面的工作!希望我們可以弄清楚,所以這裏有一些間距,但不幸的是這些項目仍然是左對齊的(雖然有左邊距),但它仍然不能像你的截圖一樣工作。 –

+0

好的,我解決了它。檢查我的回答:) –