体积转换工具的开发与实现。
准备工作和样式布局与我开发的另一个小工具(长度转换工具)所用一致,详情请看我上一篇文章。
链接: Android开发实用小工具二——长度转换工具
VolumeConversionActivity.java :
public class VolumeConversionActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener {// 定义下拉列表需要显示的单位名称private static final String[] nameArray = {"立方米", "立方分米", "立方厘米", "立方毫米", "公石", "升","分升", "厘升", "毫升", "立方英尺", "立方英寸", "立方码","亩英尺"};// 定义下拉列表需要显示的单位数组private static final String[] unitArray = {"m³", "dm³", "cm³", "mm³", "hl", "l","dl", "cl", "ml", "ft³", "in³", "yd³","af³"};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) {Create(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(0);sp_select2.setSelection(1);// 给下拉框设置选择监听器,一旦用户选中某一项,就触发监听器的 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;break;case "立方分米":tempValue = d1.divide(new BigDecimal("1.0E3"), 20, BigDecimal.ROUND_HALF_UP);break;case "立方厘米":tempValue = d1.divide(new BigDecimal("1.0E6"), 20, BigDecimal.ROUND_HALF_UP);break;case "立方毫米":tempValue = d1.divide(new BigDecimal("1.0E9"), 20, BigDecimal.ROUND_HALF_UP);break;case "公石":tempValue = d1.divide(new BigDecimal(10), 20, BigDecimal.ROUND_HALF_UP);break;case "升":tempValue = d1.divide(new BigDecimal("1.0E3"), 20, BigDecimal.ROUND_HALF_UP);break;case "分升":tempValue = d1.divide(new BigDecimal("1.0E4"), 20, BigDecimal.ROUND_HALF_UP);break;case "厘升":tempValue = d1.divide(new BigDecimal("1.0E5"), 20, BigDecimal.ROUND_HALF_UP);break;case "毫升":tempValue = d1.divide(new BigDecimal("1.0E6"), 20, BigDecimal.ROUND_HALF_UP);break;case "立方英尺":tempValue = d1.multiply(new BigDecimal(0.028316846592));break;case "立方英寸":tempValue = d1.multiply(new BigDecimal(0.000016387064));break;case "立方码":tempValue = d1.multiply(new BigDecimal(0.764554857984));break;case "亩英尺":tempValue = d1.multiply(new BigDecimal(1234));break;}// 将临时数值tempValue(立方米)转换为value2BigDecimal d2 = new BigDecimal(0);switch (unit2) {case "立方米":d2 = tempValue;break;case "立方分米":d2 = tempValue.multiply(new BigDecimal("1.0E3"));break;case "立方厘米":d2 = tempValue.multiply(new BigDecimal("1.0E6"));break;case "立方毫米":d2 = tempValue.multiply(new BigDecimal("1.0E9"));break;case "公石":d2 = tempValue.multiply(new BigDecimal(10));break;case "升":d2 = tempValue.multiply(new BigDecimal("1.0E3"));break;case "分升":d2 = tempValue.multiply(new BigDecimal("1.0E4"));break;case "厘升":d2 = tempValue.multiply(new BigDecimal("1.0E5"));break;case "毫升":d2 = tempValue.multiply(new BigDecimal("1.0E6"));break;case "立方英尺":d2 = tempValue.divide(new BigDecimal(0.028316846592), 20, BigDecimal.ROUND_HALF_UP);break;case "立方英寸":d2 = tempValue.divide(new BigDecimal(0.000016387064), 20, BigDecimal.ROUND_HALF_UP);break;case "立方码":d2 = tempValue.divide(new BigDecimal(0.764554857984), 20, BigDecimal.ROUND_HALF_UP);break;case "亩英尺":d2 = tempValue.divide(new BigDecimal(1234), 20, BigDecimal.ROUND_HALF_UP);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 (Id() == 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) {}
}
以上就是体积转换工具的开发与实现的内容。
本文发布于:2024-01-28 03:44:35,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063846774540.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |