Android中的四大组件大家都知道吧!

Activity、Service、Broadcast Receiver、Content Provider

所以我们这里会用到前三大组件:

//这是service类

package cn.zuxia.andorid.app;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.widget.Toast;

public class MyService extends Service {
private static String values;
private static boolean flag=true;
//定义四个整型变量,用来存储时分秒毫秒等
private int mHour = 0, mMinute = 0, mSecond = 0, mMs = 0;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub

//这里我们是返回一个空。当然,如果我们要绑定服务,可以在这里发返回一个服务
return null;
}

@Override
public void onCreate() {
super.onCreate();
}

/**
* 重写的start方法,用来执行一系列操作
*/
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
//得到传入的值
values = intent.getStringExtra("values");
//如果传入的是start,也就是开始计时按钮,就进入
if ("start".equals(values)) {
flag=true;
}
//如果传入的值是pause,也就是暂停,那么在这里面将要执行暂停操作
else if("pause".equals(values)){
flag=false;
}else if ("continue".equals(values)) {
flag=true;
}
//启用一个线程,用来刷新时间
new Thread(new Runnable() {
@Override
public void run() {
                                 //暂停时就进入这个循环,循环条件是根据传入的值,也就是按下的按钮进行处理的
while (!flag) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//启用一个while循环
while (flag) {
try {
//休眠10毫秒,然后刷新
Thread.sleep(10);
mMs++;
//获取一个message实例,传入数据
Message message = mHandler.obtainMessage();
//定义一个messageId
message.what = 1;
//发送信息
mHandler.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (1 == msg.what) {
//定义四个String,主要用于修饰界面美观,也就是说用来填充显示是的空位,之后在if语句中赋值
String value1 = "", value2 = "", value3 = "", value4 = "";
//应用一系列的if判断,用来操作时分秒的计算与赋值
if (mMs >= 99) {
mMs = 0;
mSecond++;
}
if (mSecond > 59) {
mSecond = 0;
mMinute++;
}
if (mMinute > 59) {
mMinute = 0;
mHour++;
}
//如果都是一位数,那么就在其前面加一个0,填充
if (mMs < 10) {
value1 = "0";
}
if (mSecond < 10) {
value2 = "0";
}
if (mMinute < 10) {
value3 = "0";
}
if (mHour < 10) {
value4 = "0";
}
//打印显示数据
android_stop_watchActivity.mTextView.setText("第一个码表:" + value4
+ mHour + ":" + value3 + mMinute + ":" + value2
+ mSecond + ":" + value1 + mMs);
}
}
};
}

//这是activity类

package cn.zuxia.andorid.app;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class android_stop_watchActivity extends Activity {
//声明两个button控件
private Button buttonStart,buttonPause;
    //声明一个TextView控件,用于显示码表信息
public static TextView mTextView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //获取TextView实例
        mTextView=(TextView) findViewById(R.id.displayFirstInfo);
        buttonStart=(Button) findViewById(R.id.startBtn);
        buttonPause=(Button) findViewById(R.id.pauseBtn);
    }

/**
     * 实现单击按钮监听事件方法
     * @param v
     */
    public void onAction(View v){
    //创建Intent对象
    Intent intent=new Intent();
    if (v.getId() == R.id.startBtn) {
startService(intent,"start");
buttonStart.setEnabled(false);
} else if (v.getId() == R.id.pauseBtn) {
String text=buttonPause.getText().toString();
if ("暂停".equals(text)) {
startService(intent,"pause");
buttonPause.setText("继续");
}else{
startService(intent,"continue");
buttonPause.setText("暂停");
}
} else if (v.getId() == R.id.stopBtn) {
stopService(intent);
buttonStart.setEnabled(true);
}
    }
    /**
     * 创建一个启动服务方法
     */
    private void startService(Intent intent,String values){ 
    intent.setClass(android_stop_watchActivity.this, MyService.class);
    intent.putExtra("values", values);
    startService(intent);
    }
}

//这是布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<TextView
        android:id="@+id/displayText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:gravity="center" />
    <Button
        android:id="@+id/startBtn"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:layout_below="@id/displayText"
        android:layout_margin="4dip"
        android:onClick="onAction"
        android:text="开始"
        />
     <Button
        android:id="@+id/pauseBtn"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:layout_below="@id/displayText"
        android:layout_toRightOf="@id/startBtn"
        android:layout_margin="4dip"
        android:onClick="onAction"
        android:text="暂停"
        />
      <Button
        android:id="@+id/stopBtn"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:layout_below="@id/displayText"
         android:layout_toRightOf="@id/pauseBtn"
        android:layout_margin="4dip"
        android:onClick="onAction"
        android:text="停止"
        />
      <TextView
          android:id="@+id/displayFirstInfo"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_below="@id/pauseBtn"
           android:text="第一个码表:00:00:00:00"
           android:gravity="center"
          />

</RelativeLayout>

转载于:https://www.cnblogs.com/Catherine-Brain/p/3475506.html

利用Android中的三大主件来实现一个码表相关推荐

  1. Android中的基础控件TextView、Button、ImageView、EditText、ProgressBar

    文章目录 1 Android中的基础控件 1.1 控件的通用属性 2 TextView 2.1 TextView的继承关系 2.2 TextView的常用属性 3 EditText 3.1 常用属性 ...

  2. Android中进度条控件使用

    android中进度条控件使用 ProgressBar pb = findViewById(R.id.pb);pb.setMax(100);pb.setProgress(33); 转载于:https: ...

  3. 从零开始学android:Android中的基本控件(上)

    从零开始学android:Android中的基本控件(上) 本章内容较多,下面只贴代码,大家只需要贴到自己eclipse里就知道作用^^! View组件简介 Android中的View组件包含了几乎所 ...

  4. Android中如何使控件保持固定宽高比

    目录 1.自定义view 2.adjustViewBounds 3.百分比布局 4.ConstraintLayout 我们在android开发过程中可能会遇到一种情况,一个组件需要保持固定的宽高比,但 ...

  5. android 怎么固定控件,Android中如何使控件保持固定宽高比

    我们在android开发过程中可能会遇到一种情况,一个组件需要保持固定的宽高比,但是组件本身大小却不定.尤其在android屏幕碎片化的情况下,很多时候我们需要让一个组件宽度与屏幕宽度一致,这样就无法 ...

  6. android中翻页控件,Android GridView控件分页自定义

    上一篇:Android GridView控件自定义中,我们自定义了Android GridView控件. 包名解释: com.yaomei.activity.adapter   DEMO使用到的自定义 ...

  7. android 中的组合控件的设计

    在开发应用程序的时候,很多时候会使用到几个重复的控件,例如Android手机的设置界面里面的位置服务里面的每一栏都是组合控件,也就是说多个控件组成一个整体,如下图所示: 红色方框里面的是由两个Text ...

  8. android中的 listview控件,聊聊Android中的ListView控件

    软硬件环境 Macbook Pro MGX 72 Android Studio 1.3.2 坚果手机 前言 ListView是Android系统中使用非常广泛的一种控件,几乎所有的App都会用到它.它 ...

  9. android 中使用TabHost控件实现微信界面的底部菜单效果

    首先,在布局文件中的代码如下:(菜单位于底部,需要在代码中设置) <TabHostandroid:id="@android:id/tabhost"android:layout ...

最新文章

  1. 【DBMS 数据库管理系统】OLTP 联机事务处理 与 OLAP 联机分析处理 ( 数据仓库 与 OLAP | OLAP 联机分析处理 | OLTP 与 OLAP 区别 )
  2. ubuntu oracle 10g 安装,Ubuntu 12.04 安装Oracle 10g 全过程(完美)及问题解决办法
  3. php 浮点型float 强转int php金额计算 php元转分
  4. python中正则表达式是什么意思_python – 正则表达式中[^.] *的含义是什么?
  5. python中列表实现去重使用_Python实现嵌套列表去重方法示例
  6. lintcode-517-丑数
  7. Python中for循环之range、enumerate函数
  8. 深度 | 人工智能究竟能否实现?
  9. 红米K40稳定版12.5.3.0 刷面具 magisk一键ROOT教程 附工具
  10. 星巴克 销售数据分析_星巴克大数据科学家纳米级推广战略顶峰项目
  11. sample函数—R语言
  12. 【圆方树】CodeForces487E Tourists
  13. Log4j整合阿里云日志服务
  14. redis-cli使用说明
  15. 连续仨月霸占牛客榜首!京东T8呕心巨作:700页JVM虚拟机实战手册
  16. linux实验实训报告,linux实验实训报告.doc
  17. 原理剖析(第 012 篇)Netty之无锁队列MpscUnboundedArrayQueue原理分析
  18. “加密上海·喜玛拉雅Web3.0数字艺术大展”落幕,AIGC和数字艺术衍生品是最大赢家?...
  19. excel 置信区间 计算_如何用excel计算95%的置信区间?
  20. scViewerX Crack,处理各种文件格式

热门文章

  1. C++ bitset的用法
  2. s4-2 ALOHA 协议
  3. java错误页面显示错误信息_Struts2在JSP页面中显示错误信息和提示信息的方法
  4. mysql之case_mysql存储过程之case语句
  5. pytorch安装换源ubuntu_ubuntu 安装pytorch问题
  6. 1776: Press the switch(思维题)
  7. 1600: 卡斯丁狗要吃糖葫芦-回文串
  8. 商越加入阿里云原生合作伙伴计划,共创智慧采购新生态
  9. 《Java开发手册》解读:大整数传输为何禁用Long类型?
  10. 揭秘MySQL生态重要功能,X-Engine引擎核心能力——OnlineDDL