欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android TextClock的坑(系统12小时强制转换成24小时格式)

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

  起初自己为了做一个时间显示,是采用开线程的方式来实现的,但是总感觉这样,开着线程,延迟一秒钟去刷新控件,总感觉对内存不友好,找了一下资料发现了一个官方的控件,可以帮我们实现,当时在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"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".TestActivity">


        <TextClock
            android:id="@+id/tv_year"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:textSize="28sp"
            android:format12Hour="yyyy年M月dd日 EEE HH:mm:ss"
            android:format24Hour="yyyy年M月dd日 EEE HH:mm:ss"
            />


</LinearLayout>

这样不管系统的设置是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<MainActivity> 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

 

本文地址:https://blog.csdn.net/qq_36771930/article/details/107381884

相关标签: Android