Android 材料设计回收视图布局
如何为我的RecyclerView归档如下布局: 我尝试过创造它,但它确实看起来像giudlines 这是从材料设计指南中获取的,但除了草图和/或PSD之外,我找不到任何xml布局。 有xml格式的Resources directl吗 编辑1:我只需要单个列表项XML布局Android 材料设计回收视图布局,android,xml,layout,material-design,Android,Xml,Layout,Material Design,如何为我的RecyclerView归档如下布局: 我尝试过创造它,但它确实看起来像giudlines 这是从材料设计指南中获取的,但除了草图和/或PSD之外,我找不到任何xml布局。 有xml格式的Resources directl吗 编辑1:我只需要单个列表项XML布局 编辑2:我知道如何使用和实施RecyclerView请参考此官方文档链接,了解如何使用RecyclerView.LayoutManager创建一个包含所需内容的.xml示例: <?xml version="1.
编辑2:我知道如何使用和实施RecyclerView请参考此官方文档链接,了解如何使用RecyclerView.LayoutManager创建一个包含所需内容的.xml示例:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/gradient_bg"
android:orientation="horizontal"
android:layout_margin="1dp"
android:padding="1dip" >
<LinearLayout android:id="@+id/thumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="17dip"
android:layout_alignParentLeft="true"
android:layout_marginRight="2dip">
<ImageView
android:id="@+id/gasImagem"
android:contentDescription="cover"
android:layout_width="100dip"
android:layout_height="100dip"
/>
</LinearLayout>
<TextView
android:id="@+id/gasTitulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/thumbnail"
android:layout_toRightOf="@+id/thumbnail"
android:textColor="#040404"
android:layout_marginTop="30dp"
android:typeface="sans"
android:textSize="20sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/gasPreco"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="#000000"
android:textStyle="bold"
android:layout_marginTop="95dp"
android:layout_toRightOf="@+id/thumbnail"/>
<Button
android:id="@+id/btCarro"
android:layout_width="50dp"
android:layout_height="30dp"
android:background = "@drawable/roundedbutton"
android:layout_marginTop="95dp"
android:layout_marginLeft="310dp"
android:drawableTop="@drawable/shoppingcart"
android:textAlignment="center"
/>
</RelativeLayout>
After this create an adapter **example**
public class MyAdaptadorRecycler extends RecyclerView.Adapter<MyAdaptadorRecycler.ViewHolder> {
private List<Produto>gasList;
private LayoutInflater layout;
public MyAdaptadorRecycler(Context c,List<Produto>l){
gasList = l;
layout = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = layout.inflate(R.layout.list_row,parent,false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.ivcapa.setImageResource(gasList.get(position).getImagem());
holder.tvtitulo.setText(gasList.get(position).getNome());
holder.tvPreco.setText(String.valueOf(gasList.get(position).getPreco()) + "€");
final int posicao = position;
holder.bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Carrinho: ", Toast.LENGTH_SHORT).show();
}
});
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Recycle Click", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return gasList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
protected TextView tvtitulo, tvPreco;
protected ImageView ivcapa;
protected Button bt;
public ViewHolder(View itemView) {
super(itemView);
this.tvtitulo = (TextView) itemView.findViewById(R.id.gasTitulo);
this.ivcapa = (ImageView) itemView.findViewById(R.id.gasImagem);
this.tvPreco = (TextView)itemView.findViewById(R.id.gasPreco);
this.bt = (Button)itemView.findViewById(R.id.btCarro);
}
}
}
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private final int mVerticalSpaceHeight;
public DividerItemDecoration(int mVerticalSpaceHeight) {
this.mVerticalSpaceHeight = mVerticalSpaceHeight;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
outRect.bottom = mVerticalSpaceHeight;
//outRect.left = mVerticalSpaceHeight;
//outRect.right = mVerticalSpaceHeight;
}
}
then in your mainActivity you **need to do this:**
LinearLayoutManager llm = new LinearLayoutManager(this);
this.rv.setLayoutManager(llm);
rv.addItemDecoration(new DividerItemDecoration(20));
rv.setHasFixedSize(true);
nr= 1;
this.listaPordutos = new ArrayList<Produto>();
this.adapatadorLivros = new MyAdaptadorRecycler(this, listaPordutos);
rv.setAdapter(this.adapatadorLivros);
在此之后,创建一个适配器**示例**
公共类MyAdapterRecycler扩展了RecyclerView.Adapter{
私人名单;
私人布局:更平坦的布局;
公共资源回收器(上下文c,列表L){
gasList=l;
layout=(LayoutInflater)c.getSystemService(Context.layout\u INFLATER\u SERVICE);
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=布局。充气(右布局。列表行,父项,false);
视窗支架vh=新视窗支架(v);
返回vh;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.ivcapa.setImageResource(gasList.get(position.getImagem());
holder.tvtitulo.setText(gasList.get(position.getNome());
holder.tvprec.setText(String.valueOf(gasList.get(position.getPreco())+“€”);
最终int posicao=位置;
holder.bt.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(v.getContext(),“Carrinho:”,Toast.LENGTH_SHORT.show();
}
});
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Toast.makeText(view.getContext(),“循环单击”,Toast.LENGTH\u SHORT.show();
}
});
}
@凌驾
public int getItemCount(){
返回gasList.size();
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
受保护的文本视图TVTUTOLO、TVPREC;
受保护图像视图ivcapa;
保护按钮bt;
公共视图持有者(视图项视图){
超级(项目视图);
this.tvtitulo=(TextView)itemView.findViewById(R.id.gasTitulo);
this.ivcapa=(ImageView)itemView.findViewById(R.id.gasImagem);
this.tvprec=(TextView)itemView.findViewById(R.id.gasPreco);
this.bt=(按钮)itemView.findViewById(R.id.btCarro);
}
}
}
可能您需要一个分隔符示例:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/gradient_bg"
android:orientation="horizontal"
android:layout_margin="1dp"
android:padding="1dip" >
<LinearLayout android:id="@+id/thumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="17dip"
android:layout_alignParentLeft="true"
android:layout_marginRight="2dip">
<ImageView
android:id="@+id/gasImagem"
android:contentDescription="cover"
android:layout_width="100dip"
android:layout_height="100dip"
/>
</LinearLayout>
<TextView
android:id="@+id/gasTitulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/thumbnail"
android:layout_toRightOf="@+id/thumbnail"
android:textColor="#040404"
android:layout_marginTop="30dp"
android:typeface="sans"
android:textSize="20sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/gasPreco"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="#000000"
android:textStyle="bold"
android:layout_marginTop="95dp"
android:layout_toRightOf="@+id/thumbnail"/>
<Button
android:id="@+id/btCarro"
android:layout_width="50dp"
android:layout_height="30dp"
android:background = "@drawable/roundedbutton"
android:layout_marginTop="95dp"
android:layout_marginLeft="310dp"
android:drawableTop="@drawable/shoppingcart"
android:textAlignment="center"
/>
</RelativeLayout>
After this create an adapter **example**
public class MyAdaptadorRecycler extends RecyclerView.Adapter<MyAdaptadorRecycler.ViewHolder> {
private List<Produto>gasList;
private LayoutInflater layout;
public MyAdaptadorRecycler(Context c,List<Produto>l){
gasList = l;
layout = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = layout.inflate(R.layout.list_row,parent,false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.ivcapa.setImageResource(gasList.get(position).getImagem());
holder.tvtitulo.setText(gasList.get(position).getNome());
holder.tvPreco.setText(String.valueOf(gasList.get(position).getPreco()) + "€");
final int posicao = position;
holder.bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Carrinho: ", Toast.LENGTH_SHORT).show();
}
});
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Recycle Click", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return gasList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
protected TextView tvtitulo, tvPreco;
protected ImageView ivcapa;
protected Button bt;
public ViewHolder(View itemView) {
super(itemView);
this.tvtitulo = (TextView) itemView.findViewById(R.id.gasTitulo);
this.ivcapa = (ImageView) itemView.findViewById(R.id.gasImagem);
this.tvPreco = (TextView)itemView.findViewById(R.id.gasPreco);
this.bt = (Button)itemView.findViewById(R.id.btCarro);
}
}
}
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private final int mVerticalSpaceHeight;
public DividerItemDecoration(int mVerticalSpaceHeight) {
this.mVerticalSpaceHeight = mVerticalSpaceHeight;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
outRect.bottom = mVerticalSpaceHeight;
//outRect.left = mVerticalSpaceHeight;
//outRect.right = mVerticalSpaceHeight;
}
}
then in your mainActivity you **need to do this:**
LinearLayoutManager llm = new LinearLayoutManager(this);
this.rv.setLayoutManager(llm);
rv.addItemDecoration(new DividerItemDecoration(20));
rv.setHasFixedSize(true);
nr= 1;
this.listaPordutos = new ArrayList<Produto>();
this.adapatadorLivros = new MyAdaptadorRecycler(this, listaPordutos);
rv.setAdapter(this.adapatadorLivros);
public类DividerItemDecoration扩展了RecyclerView.ItemDecoration{
专用最终整数mVerticalSpaceHeight;
公共分隔符分隔符(int mVerticalSpaceHeight){
this.mVerticalSpaceHeight=mVerticalSpaceHeight;
}
@凌驾
public void getItemOffset(Rect-outRect、View-View、RecyclerView-parent、,
RecyclerView.State){
outRect.bottom=mVerticalSpaceHeight;
//outRect.left=mVerticalSpaceHeight;
//outRect.right=mVerticalSpaceHeight;
}
}
那么在你的主要活动中,你**需要这样做:**
LinearLayoutManager llm=新的LinearLayoutManager(本);
这是rv.setLayoutManager(llm);
rv.附加装饰(新分区装饰(20));
rv.setHasFixedSize(真);
nr=1;
this.listaPordutos=新的ArrayList();
this.adapatadorLivros=新的MyAdaptorRecycler(this,listaPordutos);
rv.setAdapter(此为Adapatadorolivros);
这只是我用来创建程序的示例
希望这能帮助您,任何疑问都可以说:)您需要自己制作
XML布局。去试试。你想创建一个标题列表吗?@Funkyidol标题列表不重要,我需要一个列表项layout@jaydroider为什么谷歌不提供它们?他们有指导方针,但没有提供解决方案。真奇怪谢谢你的回答。我知道如何使用RecyclerView,但我需要指南中显示的xml布局