当前位置: 移动技术网 > 移动技术>移动开发>Android > Android TextClock的坑(系统12小时强制转换成24小时格式)

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

2020年07月17日  | 移动技术网移动技术  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网