【GT-安卓应用开发之时间显示】
前言:有的时候我们需要在应用界面实时的展示当前时间,最近的项目中刚好也有类似的需求,今天便抽出点时间整理并记录一下,后面会附带demo的地址
首先,先展示下界面效果:
从效果图中可以清楚的看到展示了当前年月日、周几以及当前的时间,下面先说一下我的设计思路:创建三个TextView分别用于展示日期、周几以及时间,开启一个子线程每隔一秒钟刷新一下。
下面,记录一下该demo的实现过程
1、创建布局,创建三个TextView并居中显示
2、创建一个事件监听OnDateTimeListener,并定义onDateTime方法,用于监听时间变化
public interface OnDateTimelistener { void onDateTime(); }
3、创建DateTimeUtil,在里面定义时间格式化、获取当前时间等相关的方法
4、创建一个线程,DateTimeThread,每隔一秒发送消息触发时间变化
public class DateTimeThread extends Thread{ private OnDateTimelistener listener; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: if (listener !=null){ listener.onDateTime(); } break; } } }; public DateTimeThread(OnDateTimelistener listener) { this.listener = listener; } @Override public void run() { super.run(); do { try { Thread.sleep(1000); Message msg = new Message(); msg.what = 1; mHandler.sendMessage(msg); } catch (InterruptedException e) { e.printStackTrace(); } } while (true); }
5、在Activity中继承监听事件、开启子线程、实现onDateTime、利用DateTimeUtil更新UI
public class MainActivity extends AppCompatActivity implements OnDateTimelistener{ private TextView date,time,week; private DateTimeUtil dateTimeUtil; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); date = (TextView)findViewById(R.id.date); time = (TextView)findViewById(R.id.time); week = (TextView)findViewById(R.id.week); dateTimeUtil = DateTimeUtil.getInstance(); new DateTimeThread(this).start(); } @Override public void onDateTime() { date.setText(dateTimeUtil.getCurrentDate()); week.setText(dateTimeUtil.getCurrentWeekDay(0)); time.setText(dateTimeUtil.getCurrentTimeHHMM()); } }
附上项目地址