2016-09-16 143 views
1

我有一個Android項目,我正在使用Recycler視圖打印項目列表,每個項目只有一個圖像,並在這些圖像之間,Android正在創建一個大的空白空間。我研究並看到將我的佈局更改爲wrap_content,並將其更改爲回收站視圖佈局,項目佈局,頁面佈局但未起作用,我想知道還有哪些更多選項需要更改,我將發佈我在這裏的2類,活動和適配器,並且兩個佈局XML和XML的項目(回收站viewItem)Android RecyclerView空白空間

活動:

public class MenuPrincipal extends AppCompatActivity { 

private RecyclerView recyclerView; 
private MenuEsportesAdapter adapterGrupos; 
private ArrayList<MenuEsporte> listaGruposMenu; 
private ImageView imgTopo; 

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

    imgTopo = (ImageView) findViewById(R.id.MenuPrincipal_imagemTopo); 
    imgTopo.setImageResource(R.drawable.sol); 

    MenuEsporte me = new MenuEsporte(); 

    listaGruposMenu = me.getAllEsportes(); 

    recyclerView = (RecyclerView) findViewById(R.id.recyclerViewMenuGrupo); 

    recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    recyclerView.setHasFixedSize(false); 
    adapterGrupos = new MenuEsportesAdapter(this, listaGruposMenu, onClickGruposMenu()); 
    recyclerView.setAdapter(adapterGrupos); 

} 

private MenuEsportesAdapter.MenuEsporteOnClickListener onClickGruposMenu(){ 
    return new MenuEsportesAdapter.MenuEsporteOnClickListener(){ 

     @Override 
     public void onClickMenuEsporte(MenuEsportesAdapter.MenuEsportesViewHolder holder, int idx) { 
      Toast.makeText(getApplicationContext(),"Clicou " + idx, Toast.LENGTH_SHORT).show(); 

      Intent i = new Intent(getApplicationContext(),JogosClassificacao.class); 
      Bundle bundle = new Bundle(); 
      bundle.putString("Esporte", listaGruposMenu.get(idx).nomeEsporte); 
      i.putExtras(bundle); 
      startActivity(i); 
     } 
    }; 
} 

}

ADAPTER

public class MenuEsportesAdapter extends RecyclerView.Adapter<MenuEsportesAdapter.MenuEsportesViewHolder> { 
protected static final String TAG = "livroandroid"; 
private final List<MenuEsporte> listaMenuEsporte; 
private final Context context; 
private final MenuEsporteOnClickListener onClickListener; 

public interface MenuEsporteOnClickListener { 
    public void onClickMenuEsporte(MenuEsportesViewHolder holder, int idx); 
} 

public MenuEsportesAdapter(Context context, List<MenuEsporte> listaMenuEsporte, MenuEsporteOnClickListener onClickListener) { 
    this.context = context; 
    this.listaMenuEsporte = listaMenuEsporte; 
    this.onClickListener = onClickListener; 
} 

@Override 
public MenuEsportesViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    // Este método cria uma subclasse de RecyclerView.ViewHolder 
    // Infla a view do layout 
    View view = LayoutInflater.from(context).inflate(R.layout.lista_item, viewGroup, false); 
    // Cria a classe do ViewHolder 
    MenuEsportesViewHolder holder = new MenuEsportesViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(final MenuEsportesViewHolder holder, final int position) { 
    // Este método recebe o índice do elemento, e atualiza as views que estão dentro do ViewHolder 
    MenuEsporte c = listaMenuEsporte.get(position); 
    // Atualizada os valores nas views 
    //holder.tNome.setText(c.nomeEsporte); 
    holder.img.setImageResource(c.fotoResource); 

    //holder.img.setImageURI(Uri.fromFile(file)); 

    // Click 
    if (onClickListener != null) { 
     holder.itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Chama o listener para informar que clicou no Planeta 
       onClickListener.onClickMenuEsporte(holder, position); 
      } 
     }); 
    } 
} 

@Override 
public int getItemCount() { 
    return this.listaMenuEsporte != null ? this.listaMenuEsporte.size() : 0; 
} 

// Subclasse de RecyclerView.ViewHolder. Contém todas as views. 
public static class MenuEsportesViewHolder extends RecyclerView.ViewHolder { 
    public TextView tNome; 
    ImageView img; 
    private View view; 

    public MenuEsportesViewHolder(View view) { 
     super(view); 
     this.view = view; 
     // Cria as views para salvar no ViewHolder 
     //tNome = (TextView) view.findViewById(R.id.textViewNome); 
     img = (ImageView) view.findViewById(R.id.imageViewFoto); 
    } 
} 

}

而且個XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<!-- 
<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:textColor="#000000" 
    android:id="@+id/textViewNome"/> 
    --> 
<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/imageViewFoto"/> 

</LinearLayout> 

二:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="juriteam.br.com.thr_sportgames.paginas.MenuPrincipal" 
tools:showIn="@layout/activity_menu_principal" 
android:orientation="vertical"> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="2" 
    android:id="@+id/MenuPrincipal_imagemTopo" 
    android:layout_gravity="center_horizontal" /> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerViewMenuGrupo" 
    android:layout_height="0dp" 
    android:layout_weight="7" 
    android:layout_width="match_parent"/> 

</LinearLayout> 

有人可以幫我嗎? 對不起,葡萄牙語的名字和評論。任何問題請問我。 謝謝你這麼多

回答

0

您必須指定您的ImageView的高度,在你lista_item,而不是高度設置爲match_parent

1

問題是RecyclerView項目佈局。您已將match_parent財產交給ImageView。而不是像48dp那樣給出恆定的大小。

+0

這工作!但我不想把一個固定的數值,因爲這種方式我需要把多個值放到多個屏幕尺寸:( –

+0

然後給包裝內容大小..和48dp足夠所有設備。 – LearnPainLess

0

在lista_item佈局中,您應該將高度設置爲wrap_content或常量大小。