安卓开发入门基础之日期视图与日期选择器+多线程时间简单设计

styles.xml

  • 往styles.xml里添加下面的主题格式,改变日期视图字体颜色与选中的颜色
<style name="CalenderViewDateCustomText" parent="android:TextAppearance.DeviceDefault.Small">
    <item name="android:textColor">@android:color/black</item>
    <item name="android:weekNumberColor">@android:color/holo_blue_light</item>
</style>

<style name="CalenderViewWeekCustomText" parent="android:TextAppearance.DeviceDefault.Small">
    <item name="android:textColor">@android:color/holo_blue_dark</item>
</style>

calendarview.xml布局构思

  • 日期视图的xml总体是一个垂直线性布局
  • 里面放1个Textview文本,1个日期视图CalendarView,1个Button按钮
<CalendarView
    android:id="@+id/calendarview"
    android:theme="@style/CalenderViewCustom"
    android:dateTextAppearance="@style/CalenderViewDateCustomText"
    android:weekDayTextAppearance="@style/CalenderViewWeekCustomText"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:layout_marginTop="70dp" />

calendarview.java

  • 获取到的时间需要+8才能得到当前的北京时间
public class calendarview extends AppCompatActivity {

    private Button dingwei;
    private CalendarView calendarview;
    private TextView text1;
    private String date;
    private String date2;
    Handler1 handler1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calendarview);
        
        calendarview = findViewById(R.id.calendarview);

        final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        format.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));

        date = format.format(calendarview.getDate());

        text1 = findViewById(R.id.text);
        handler1 =new Handler1();
        Thread1 thread1 =new Thread1();
        thread1.start();

        calendarview.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(@NonNull CalendarView calendarView, int i, int i1, int i2) {

                date2 = i + "年" + (i1 + 1) + "月" + i2 + "日";
                if (date2.equals("2020年4月13日")) {
                    Toast.makeText(getApplicationContext(), "  您选择的时间是今天 ~~~ "+ date2, Toast.LENGTH_SHORT).show();
                    dingwei.setVisibility(View.GONE);
                } else {
                    dingwei.setVisibility(View.VISIBLE);
                    Toast.makeText(getApplicationContext(), "您手动选择的时间是:  " + date2 , Toast.LENGTH_SHORT).show();
                }
            }
        });

        dingwei = view.findViewById(R.id.dingwei);
        dingwei.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getApplicationContext(), "当前时间是:  " + getTime(), Toast.LENGTH_SHORT).show();
            }
        });
        return view;
    }
    //获得当前年月日时分秒星期
    public String getTime(){
        final Calendar c = Calendar.getInstance();
        c.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
        String mYear = String.valueOf(c.get(Calendar.YEAR)); // 获取当前年份
        String mMonth = String.valueOf(c.get(Calendar.MONTH) + 1);// 获取当前月份
        String mDay = String.valueOf(c.get(Calendar.DAY_OF_MONTH));// 获取当前月份的日期号码
        String mWay = String.valueOf(c.get(Calendar.DAY_OF_WEEK));
        String mHour = String.valueOf(c.get(Calendar.HOUR_OF_DAY));//时
        String mMinute = String.valueOf(c.get(Calendar.MINUTE));//分
        String mSecond = String.valueOf(c.get(Calendar.SECOND));//秒
        if("1".equals(mWay)){
            mWay ="日";
        }else if("2".equals(mWay)){
            mWay ="一";
        }else if("3".equals(mWay)){
            mWay ="二";
        }else if("4".equals(mWay)){
            mWay ="三";
        }else if("5".equals(mWay)){
            mWay ="四";
        }else if("6".equals(mWay)){
            mWay ="五";
        }else if("7".equals(mWay)){
            mWay ="六";
        }
        return mYear + "-" + mMonth + "-" + mDay+"  "+"星期"+ mWay +"  "+mHour+":"+mMinute+":"+mSecond;
    }

    class Handler1 extends android.os.Handler{
        @Override
        public void handleMessage(Message msg){
            switch (msg.what){
                case 0x8f:
                    text1.setText("  当前时间为: " + getTime());
            }
        }
    }
    class Thread1 extends Thread{
        @Override
        public void run(){

            for (int i=1;i<=1000000000;i++){
                Message message =new Message();
                message.what = 0x8f;
                message.arg1 = i;
                handler1.sendMessage(message);
                try {
                    Thread1.sleep(1000);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

设计效果图

  • 刚进入的界面

在这里插入图片描述

  • 点击别的时间弹出提示与隐藏按钮

在这里插入图片描述

  • 点击 当前时间 按钮
    在这里插入图片描述
  • 点击当前日期弹出提示

在这里插入图片描述

datepicker.xml

  • 日期选择器的xml总体是一个垂直线性布局
  • 里面放了1个日期选择器datepicker,1个Button按钮
<DatePicker

    android:layout_marginTop="100dp"
    android:theme="@style/DatePickerViewCustom"
    android:dateTextAppearance="@style/CalenderViewDateCustomText"
    android:weekDayTextAppearance="@style/CalenderViewWeekCustomText"
    android:id="@+id/dataPicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Styles.xml

  • 往styles.xml里添加下面的主题格式,改变日期选择题头部字体颜色
<style name="DatePickerViewCustom" parent="Theme.AppCompat.DayNight.Dialog">
    <item name="android:textColor">@android:color/darker_gray</item>
    <item name="android:weekNumberColor">@android:color/holo_blue_bright</item>
</style>

datepicker.java

  • 主要实现在datepicker里选择日期以及回到今天的操作
public class datepicker extends AppCompatActivity {

    private DatePicker datapicker;
    String date;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.setting);
        datapicker = findViewById(R.id.dataPicker);
        Calendar calendar = Calendar.getInstance();
        final int year = calendar.get(Calendar.YEAR);
        final int month = calendar.get(Calendar.MONTH);
        final int dayofmonth = calendar.get(Calendar.DAY_OF_MONTH);

        datapicker.init(year, month, dayofmonth, new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker datePicker, int i, int i1, int i2) {
                date = i + "年" + (i1 + 1) + "月" + i2 + "日";
                if (date.equals("2020年4月13日")) {
                    button.setVisibility(View.GONE);
                    Toast.makeText(getApplicationContext(), "  您选择的时间是今天 ~~~ " + date, Toast.LENGTH_SHORT).show();
                } else {
                    button.setVisibility(View.VISIBLE);
                    Toast.makeText(getApplicationContext(), date, Toast.LENGTH_SHORT).show();
                }
            }
        });

        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                button.setVisibility(View.GONE);
                datapicker.init(year, month, dayofmonth, new DatePicker.OnDateChangedListener() {
                    @Override
                    public void onDateChanged(DatePicker datePicker, int i, int i1, int i2) {

                        date = i + "年" + (i1 + 1) + "月" + i2 + "日";
                        if (date.equals("2020年4月13日")) {
                            button.setVisibility(View.GONE);
                            Toast.makeText(getApplicationContext(), "  您选择的时间是今天 ~~~ " + date, Toast.LENGTH_SHORT).show();
                        } else {
                            button.setVisibility(View.VISIBLE);
                            Toast.makeText(getApplicationContext(), date, Toast.LENGTH_SHORT).show();
                        }
                    }
                });

            }
        });

    }
}

设计效果图

  • 博主用了fragment作为APP开发的基本框架,后续会写到这个用法,纯粹是为了达到简洁美观的效果
  • 刚进去的界面

在这里插入图片描述

  • 点击当前设置的日期弹出提示
    在这里插入图片描述
  • 点击别的日期,出现 回到今天 的按钮,并且弹出当前日期

在这里插入图片描述

  • 准备点击回到今天按钮

在这里插入图片描述

  • 点击回到今天按钮后跳回当前设置的日期
    在这里插入图片描述
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【无痕干货营】

如果帮助到您,欢迎打赏一下我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值