Android开发实用小工具六——时间转换工具
文章目录
- 前言
- 一、效果展示
- 二、代码
- 主代码
- 总结
前言
时间转换工具的开发与实现。
一、效果展示


二、代码
准备工作和样式布局与我开发的另一个小工具(长度转换工具)所用一致,详情请看我上一篇文章。
链接: Android开发实用小工具二——长度转换工具
主代码
TimeConversionActivity.java :
public class TimeConversionActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener {// 定义下拉列表需要显示的单位名称private static final String[] nameArray = {"年", "周", "天", "小时", "分钟", "秒","毫秒", "微秒", "皮秒"};// 定义下拉列表需要显示的单位数组private static final String[] unitArray = {"y", "wk", "d", "h", "min", "s","ms", "μs", "ps"};private Spinner sp_select1;private Spinner sp_select2;TextView tv_value1;TextView tv_unit1;TextView tv_value2;TextView tv_unit2;private List<Button> buttonList = new ArrayList<>();ImageButton iv_del;// 单位一private String unit1 = "小时";// 单位二private String unit2 = "分钟";// 数值一private String value1 = "0";// 数值二private String value2 = "0";// 临时数值private BigDecimal tempValue;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_value_conversion);// 获取控件,并添加点击事件findViewById(R.id.iv_back).setOnClickListener(this);sp_select1 = findViewById(R.id.sp_select1);sp_select2 = findViewById(R.id.sp_select2);tv_value1 = findViewById(R.id.tv_value1);tv_unit1 = findViewById(R.id.tv_unit1);tv_value2 = findViewById(R.id.tv_value2);tv_unit2 = findViewById(R.id.tv_unit2);buttonList.add(findViewById(R.id.btn_0));buttonList.add(findViewById(R.id.btn_1));buttonList.add(findViewById(R.id.btn_2));buttonList.add(findViewById(R.id.btn_3));buttonList.add(findViewById(R.id.btn_4));buttonList.add(findViewById(R.id.btn_5));buttonList.add(findViewById(R.id.btn_6));buttonList.add(findViewById(R.id.btn_7));buttonList.add(findViewById(R.id.btn_8));buttonList.add(findViewById(R.id.btn_9));buttonList.add(findViewById(R.id.btn_pt));buttonList.add(findViewById(R.id.btn_clr));iv_del = findViewById(R.id.iv_del);// 给按钮设置的点击事件for (Button button : buttonList) {button.setOnClickListener(this);}iv_del.setOnClickListener(this);// 声明一个映射对象的列表,用于保存名称与单位配对信息List<Map<String, Object>> list = new ArrayList<>();// name是名称,unit是单位for (int i = 0; i < nameArray.length; i++) {Map<String, Object> item = new HashMap<>();item.put("name", nameArray[i]);item.put("unit", unitArray[i]);list.add(item);}// 声明一个下拉列表的简易适配器,其中指定了名称与单位两组数据SimpleAdapter adapter = new SimpleAdapter(this, list,R.layout.item_value_conversion,new String[]{"name", "unit"},new int[]{R.id.tv_name, R.id.tv_unit});sp_select1.setAdapter(adapter);sp_select2.setAdapter(adapter);// 设置下拉列表默认显示sp_select1.setSelection(3);sp_select2.setSelection(4);// 给下拉框设置选择监听器,一旦用户选中某一项,就触发监听器的 onItemSelected 方法sp_select1.setOnItemSelectedListener(this);sp_select2.setOnItemSelectedListener(this);}@Overridepublic void onClick(View v) {if (v.getId() != R.id.iv_back && v.getId() != R.id.iv_del && v.getId() != R.id.btn_clr && value1.length() >= 20)return;String inputText = "";// 如果不是删除按钮和返回按钮if (v.getId() != R.id.iv_del && v.getId() != R.id.iv_back) {inputText = ((TextView) v).getText().toString();}switch (v.getId()) {// 点击了返回按钮case R.id.iv_back:finish();break;// 点击了清除按钮case R.id.btn_clr:clear();break;// 点击了删除按钮case R.id.iv_del:delete();break;// 点击了小数点按钮case R.id.btn_pt:if (value1.indexOf(".") == -1)value1 = value1 + ".";refreshText();break;// 点击了数字按钮default:if (value1.equals("0")) {value1 = inputText;} else {value1 = value1 + inputText;}operation();refreshText();break;}}// 清空并初始化private void clear() {value1 = value2 = "0";refreshText();}// 刷新文本显示private void refreshText() {tv_value1.setText(value1);tv_value2.setText(value2);}// 回退private void delete() {if (value1.length() != 0) {value1 = value1.substring(0, value1.length() - 1);if (value1.length() == 0)value1 = "0";operation();refreshText();}}// 运算private void operation() {// 将value1转换为临时数值tempValue(小时)BigDecimal d1 = new BigDecimal(value1);switch (unit1) {case "年":tempValue = d1.multiply(new BigDecimal(8760));break;case "周":tempValue = d1.multiply(new BigDecimal(168));break;case "天":tempValue = d1.multiply(new BigDecimal(24));break;case "小时":tempValue = d1;break;case "分钟":tempValue = d1.divide(new BigDecimal(60), 20, BigDecimal.ROUND_HALF_UP);break;case "秒":tempValue = d1.divide(new BigDecimal(3600), 20, BigDecimal.ROUND_HALF_UP);break;case "毫秒":tempValue = d1.divide(new BigDecimal("3.6E6"), 20, BigDecimal.ROUND_HALF_UP);break;case "微秒":tempValue = d1.divide(new BigDecimal("3.6E9"), 20, BigDecimal.ROUND_HALF_UP);break;case "皮秒":tempValue = d1.divide(new BigDecimal("3.6E15"), 20, BigDecimal.ROUND_HALF_UP);break;}// 将临时数值tempValue(小时)转换为value2BigDecimal d2 = new BigDecimal(0);switch (unit2) {case "年":d2 = tempValue.divide(new BigDecimal(8760), 20, BigDecimal.ROUND_HALF_UP);;break;case "周":d2 = tempValue.divide(new BigDecimal(168), 20, BigDecimal.ROUND_HALF_UP);;break;case "天":d2 = tempValue.divide(new BigDecimal(24), 20, BigDecimal.ROUND_HALF_UP);;break;case "小时":d2 = tempValue;break;case "分钟":d2 = tempValue.multiply(new BigDecimal(60));break;case "秒":d2 = tempValue.multiply(new BigDecimal(3600));break;case "毫秒":d2 = tempValue.multiply(new BigDecimal("3.6E6"));break;case "微秒":d2 = tempValue.multiply(new BigDecimal("3.6E9"));break;case "皮秒":d2 = tempValue.multiply(new BigDecimal("3.6E15"));break;}String str = String.valueOf(d2.doubleValue());String str1 = str.substring(str.length() - 2);if (str1.equals(".0"))str = str.substring(0, str.length() - 2);value2 = str;}// 选中某一项之后触发的回调方法@SuppressLint("ResourceAsColor")@Overridepublic void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {TextView tv_unit = adapterView.findViewById(R.id.tv_unit);tv_unit.setVisibility(GridView.GONE);if (adapterView.getId() == R.id.sp_select1) {tv_unit1.setText(unitArray[i]);unit1 = nameArray[i];operation();refreshText();} else {tv_unit2.setText(unitArray[i]);unit2 = nameArray[i];operation();refreshText();}}// 什么也没选执行的回调方法@Overridepublic void onNothingSelected(AdapterView<?> adapterView) {}
}
总结
以上就是时间转换工具的开发与实现的内容。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
