起初自己为了做一个时间显示,是采用开线程的方式来实现的,但是总感觉这样,开着线程,延迟一秒钟去刷新控件,总感觉对内存不友好,找了一下资料发现了一个官方的控件,可以帮我们实现,当时在12小时和24小时格式的问题上,转换我这边还是有个问题,我这边不管系统是什么小时的格式,统一按照24小时的来,网上一些的资料都没有用,于是用了自己的方式来解决了

 

注意该控件最低api17,才支持

android {    compileSdkVersion 29    buildToolsVersion "29.0.2"    defaultConfig {        applicationId "com.example.test_01"        minSdkVersion 17        targetSdkVersion 29        versionCode 1        versionName "1.0"        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"    }

 使用例子:

<?xml version="1.0" encoding="utf-8"?>        

这样不管系统的设置是12小时还是24小时,都可以强制转换成24小时的格式了,代码逻辑判断都是不用写了。

 

记录一下自己刚开始,用线程每秒刷新的方式处理方式,下面是核心部分代码:

private boolean isTime = true;//时间 线程刷新方式       new Thread(new Runnable() {            @Override            public void run() {                while (isTime == true) {                    try {                        Thread.sleep(1000);                        init_handerNum(1);                        // Log.i(TAG, "run: 时间啊");                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }).start();    @Override    protected void onDestroy() {        super.onDestroy();        isTime = false;        handler.removeCallbacksAndMessages(null);    }  private void init_handerNum(int num) {        Message message = Message.obtain();        message.what = num;        handler.sendMessage(message);    }
    private SimpleDateFormat f1, f2, f3;    private String year, timeE, times;    private Date now;    private void init_time() {        now = new Date();        f1 = new SimpleDateFormat("yyyy 年 MM 月 dd 日 ");        f2 = new SimpleDateFormat("EEEE");        f3 = new SimpleDateFormat(" HH:mm:ss");        year = f1.format(now);        timeE = f2.format(now);        times = f3.format(now);    }    private class HandlerMain extends Handler {        private WeakReference weakReference;        public HandlerMain(MainActivity activity) {            weakReference = new WeakReference<>(activity);        }        @Override        public void handleMessage(@NonNull Message msg) {            super.handleMessage(msg);            MainActivity activity = weakReference.get();            if (activity != null) {                switch (msg.what) {                    case 1:                        //时间刷新                        init_time();                        tvYear.setText(year);  //显示年月日textview控件                        tvTimeE.setText(timeE); //显示星期几textview控件                        tvTimes.setText(times); //显示时分秒textview控件                        break;                                   }            }        }    }

 

如果你还有其他的需求也可以参考一下,其他大佬的文章:

https://blog.csdn.net/you943047219/article/details/80826855?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.nonecase

 

https://blog.csdn.net/qq_34207101/article/details/91369418

 

更多相关文章

  1. 滑轮控件研究二、GestureDetector的深入研究
  2. Android在界面中重复点击导致多次跳转或打开多个相同界面的问题
  3. android SoftKeypad 软键盘的问题
  4. android中角标的实现
  5. Android快速自定义控件+实战演示(三)完整键盘和组合回调!
  6. 关于Volley的问题,GET方式下输入有空格的参数居然解析错误,导致不
  7. Android输入控件详解
  8. Android(安卓)实现形态各异的双向侧滑菜单 自定义控件来袭
  9. 应用开发笔记 2011年10月28日 Android(安卓)使用动画效果后的控

随机推荐

  1. SQL Server全文索引服务
  2. 分页的存储过程
  3. Sql Server基本函数
  4. SQL连接查询介绍
  5. sql编程的几个常识
  6. ACCESS数据库的压缩,备份,还原,下载,删除
  7. 数据库存储过程分页显示
  8. 一个比较实用的大数据量分页存储过程
  9. 删除重复的记录,并保存第一条记录或保存
  10. MSSQL数据库的定期自动备份计划。