学习Android的第十七天

「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

前言

前几天我们一直在照着已经上线的项目仿写,相信你已经积累了不少经验,也遇到了不少bug,相信自己,相信百度,学习就是摸爬滚打的过程,特别是一个你完全都不熟悉的领域,加油吧!!!今天我们依旧是仿写一个已经上线谷歌商店的项目,继续提升我们的实战经验

先看看效果吧

image.png

我们可以很明显的看到,这是一个recyclerview,下面就是一个签到的按钮,好啦开始撸代码吧

code

老样子还是xml走起

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/layout"
    //根布局依旧是宽高直接充满
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    //距离左边10dp
    android:layout_marginLeft="10dp"
    //距离上面10dp
    android:layout_marginTop="10dp"
    //距离右边10dp
    android:layout_marginRight="10dp"
    tools:context=".TaskCenterActivity">

    <TextView
    //很明显这个是个titleTextView
    //资源id'
        android:id="@+id/tv_title"
        //宽高自适应即可
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        //距离上下左右15dp
        android:layout_margin="15dp"
        //默认文本
        android:text="每日签到"
        //字体颜色
        android:textColor="@color/black"
        //字体风格,加粗
        android:textStyle="bold"
        //约束条件
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

//下面的签到天数
    <androidx.recyclerview.widget.RecyclerView
    //资源id
        android:id="@+id/rv"
        //宽度充满即可
        android:layout_width="match_parent"
        //高度自适应即可
        android:layout_height="wrap_content"
        //距离上方15dp
        android:layout_marginTop="15dp"
        //约束到title下面
        app:layout_constraintTop_toBottomOf="@id/tv_title" />

//下面的签到
    <TextView
    //id资源id
        android:id="@+id/tv_check"
        //宽度充满,比较长嘛
        android:layout_width="match_parent"
高度自适应即可,我们用padding确定高度
        android:layout_height="wrap_content"
        //距离上下左右15dp
        android:layout_margin="15dp"
        //背景颜色
        android:background="@color/teal_200"
        //文字居中
        android:gravity="center"
        //这玩意可以设置高度的,算是奇淫技巧
        android:padding="15dp"
        //默认文本
        android:text="签到"
        //字体风格
        android:textStyle="bold"
        //约束条件
        app:layout_constraintTop_toBottomOf="@id/rv" />


</androidx.constraintlayout.widget.ConstraintLayout>
复制代码

Activity

private ConstraintLayout mLayout;
private TextView mTvTitle;
private RecyclerView mRv;
private TextView mTvCheck;

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

private void initView() {
//初始化控件
    mLayout = findViewById(R.id.layout);
    mTvTitle = findViewById(R.id.tv_title);
    mRv = findViewById(R.id.rv);
    mTvCheck = findViewById(R.id.tv_check);

//为`签到`设置背景,圆角50,颜色随便
    mTvCheck.setBackground(MyShape.setMyShape(this,50, ContextCompat.getColor(this,R.color.teal_200)));

//为recyclerview设置布局管理器,线性布局管理器,横向,不反转
    mRv.setLayoutManager(new LinearLayoutManager(this,RecyclerView.HORIZONTAL,false));
    //创建recyclerview的适配器,我们用内部的holder确定天数即可
    TaskAdapter taskAdapter = new TaskAdapter(this);
    //设置适配器
    mRv.setAdapter(taskAdapter);
}
复制代码

Adapter

//适配器必须继承自recyclerview.Adapter
public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.ViewHolder> {

    private final Context context;

//构造函数,传递一个上下文即可
    public TaskAdapter(Context context) {

        this.context = context;
    }

    @NonNull
    @NotNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
    //加载布局
        View root = LayoutInflater.from(context).inflate(R.layout.item_task, parent, false);
        //传递给ViewHolder
        return new ViewHolder(root);
    }

//绑定布局
    @Override
    public void onBindViewHolder(@NonNull @NotNull TaskAdapter.ViewHolder holder, int position) {
    //如果下标大于0,我们就重新为item中的天数textview赋值
        if (position > 0) {
        //数据为当前position+1
            holder.tv_day.setText("Day" + (position+1));
        }
        //为第一个小模块设置圆角+背景,原角度数4,北京随便
        holder.item_layout1.setBackground(MyShape.setMyShape(context,4, ContextCompat.getColor(context,R.color.teal_700)));
    }

    @Override
    public int getItemCount() {
    //默认7个
        return 7;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private final TextView tv_day;
        private final ConstraintLayout item_layout1;

        public ViewHolder(@NonNull @NotNull View itemView) {
            super(itemView);
            tv_day = itemView.findViewById(R.id.item_tv_day);
            item_layout1 = itemView.findViewById(R.id.item_layout1);
        }
    }
} 
复制代码

我们来看看效果

image.png

哇~金色传说!!!

猜你喜欢

转载自juejin.im/post/7034903939648585765