资源和布局以及adapter

0 阅读2分钟

项目运行截图 image.png

主布局文件 image.png 垂直布局:从上到下依次是标题栏、频道导航、分割线、新闻列表

频道导航:使用LinearLayout配合weight实现等宽分布

当前频道高亮:推荐频道使用红色加粗显示

RecyclerView配置:

clipToPadding="false":允许内容绘制在padding区域

paddingBottom:底部留白,提升滑动体验

标题栏布局 image.png drawableLeft:添加搜索图标

drawablePadding:图标与文字间距

paddingLeft:为图标预留空间

layout_weight="1":占据剩余空间

单图新闻项布局 image.png 标题区域:使用layout_weight="1"确保标题占据剩余空间

置顶图标:layout_alignParentBottom实现底部对齐

固定图片宽度:100dp确保图片区域一致性

RelativeLayout:精确控制各元素位置

三图新闻项布局 image.png 图片均分:使用weight=1实现三张图片等宽

自适应高度:wrap_content根据内容自动调整

图片间距:通过margin控制图片间隔

布局层次:标题 → 图片 → 信息

布局资源
主布局:activity_main.xml
包含一个 RecyclerView,ID 为 rv_list
顶部有标题栏和分类标签(推荐、抗疫等)
两种 Item 布局:
list_item_one.xml:单图新闻样式
tv_title:新闻标题 iv_top:置顶标识图标
iv_img:单张图片
tv_name:发布者名称
tv_comment:评论数
tv_time:发布时间
list_item_two.xml:三图新闻样式
tv_title:新闻标题
iv_img1、iv_img2、iv_img3:三张图片
tv_name:发布者名称
tv_comment:评论数
tv_time:发布时间
核心实现
Adapter:NewsAdapter 继承 RecyclerView.Adapter
ViewHolder:两个内部类 MyViewHolder1 和 MyViewHolder2
多类型支持:通过 getItemViewType() 返回 type(1 或 2)区分不同布局

Adapter是RecyclerView和数据源之间的连接,负责:

  1. 创建ViewHolder(onCreateViewHolder)
  2. 绑定数据到ViewHolder(onBindViewHolder)
  3. 返回数据项数量(getItemCount)
  4. 决定视图类型(getItemViewType) Adapter的文件内容:

import android.content.Context; import android.support.annotation.NonNull; 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;

import java.util.List;

public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context mContext; private List NewsList; public NewsAdapter(Context context,List NewsList) { this.mContext = context; this.NewsList=NewsList; } @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View itemView=null; RecyclerView.ViewHolder holder=null; if (viewType == 1){ itemView = LayoutInflater.from(mContext).inflate(R.layout. list_item_one, parent, false); holder= new MyViewHolder1(itemView); }else if (viewType == 2){ itemView = LayoutInflater.from(mContext).inflate(R.layout. list_item_two, parent, false); holder= new MyViewHolder2(itemView); } return holder; } @Override public int getItemViewType(int position) { return NewsList.get(position).getType(); } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { NewsBean bean=NewsList.get(position); if (holder instanceof MyViewHolder1){ if (position==0) { ((MyViewHolder1) holder).iv_top.setVisibility(View.VISIBLE); ((MyViewHolder1) holder).iv_img.setVisibility(View.GONE); } else { ((MyViewHolder1) holder).iv_top.setVisibility(View.GONE); ((MyViewHolder1) holder).iv_img.setVisibility(View.VISIBLE); } ((MyViewHolder1) holder).title.setText(bean.getTitle()); ((MyViewHolder1) holder).name.setText(bean.getName()); ((MyViewHolder1) holder).comment.setText(bean.getComment()); ((MyViewHolder1) holder).time.setText(bean.getTime()); if (bean.getImgList().size()==0)return; ((MyViewHolder1) holder).iv_img.setImageResource(bean.getImgList() .get(0)); }else if (holder instanceof MyViewHolder2){ ((MyViewHolder2) holder).title.setText(bean.getTitle()); ((MyViewHolder2) holder).name.setText(bean.getName()); ((MyViewHolder2) holder).comment.setText(bean.getComment()); ((MyViewHolder2) holder).time.setText(bean.getTime()); ((MyViewHolder2) holder).iv_img1.setImageResource(bean.getImgList() .get(0)); ((MyViewHolder2) holder).iv_img2.setImageResource(bean.getImgList() .get(1)); ((MyViewHolder2) holder).iv_img3.setImageResource(bean.getImgList() .get(2)); } } @Override public int getItemCount() { return NewsList.size(); } class MyViewHolder1 extends RecyclerView.ViewHolder { ImageView iv_top,iv_img; TextView title,name,comment,time; public MyViewHolder1(View view) { super(view); iv_top = view.findViewById(R.id.iv_top); iv_img = view.findViewById(R.id.iv_img); title = view.findViewById(R.id.tv_title); name = view.findViewById(R.id.tv_name); comment = view.findViewById(R.id.tv_comment); time = view.findViewById(R.id.tv_time); } } class MyViewHolder2 extends RecyclerView.ViewHolder { ImageView iv_img1,iv_img2,iv_img3; TextView title,name,comment,time; public MyViewHolder2(View view) { super(view); iv_img1 = view.findViewById(R.id.iv_img1); iv_img2 = view.findViewById(R.id.iv_img2); iv_img3 = view.findViewById(R.id.iv_img3); title = view.findViewById(R.id.tv_title); name = view.findViewById(R.id.tv_name); comment = view.findViewById(R.id.tv_comment); time = view.findViewById(R.id.tv_time); } } }