Android 材料设计回收视图布局

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.

如何为我的RecyclerView归档如下布局:

我尝试过创造它,但它确实看起来像giudlines

这是从材料设计指南中获取的,但除了草图和/或PSD之外,我找不到任何xml布局。 有xml格式的Resources directl吗

编辑1:我只需要单个列表项XML布局


编辑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布局