很久没更新博客了,最近在做一个新项目,遇到了很多坑,现将遇到的坑学到的东西一个个记录下来,方便自己和大家共同学习。后面还会抽出时间将项目中遇到的其他问题一一上传分析。
项目中需要使用自定义数字键盘输入金额,效果图如下
最初想偷懒在网上找个 demo copy 进项目,无奈网上的坑一个比一个多,还是自己瞎折腾吧,废话少说,开车!
首先是界面部分,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.ruicheng.keydemo.MainActivity">
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:singleLine="true"
android:drawablePadding="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:ems="10"
android:textSize="24sp"
android:hint="0.00"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="5dp">
</EditText>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/white">
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/text_dark_gray"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:orientation="horizontal"
android:visibility="visible"
android:id="@+id/linearlayout"
>
<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="4"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<TextView
android:id="@+id/btn_price_1"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textColor="@android:color/black"
android:textSize="18dp"
android:text="1"
android:gravity="center"
/>
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray"/>
<TextView
android:id="@+id/btn_price_2"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textColor="@android:color/black"
android:textSize="18dp"
android:text="2"
android:gravity="center"
/>
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray" />
<TextView
android:id="@+id/btn_price_3"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textColor="@android:color/black"
android:textSize="18dp"
android:text="3"
android:gravity="center"
/>
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/text_dark_gray" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<TextView
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textColor="@android:color/black"
android:textSize="18dp"
android:gravity="center"
android:id="@+id/btn_price_4"
android:text="4" />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray" />
<TextView
android:id="@+id/btn_price_5"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textColor="@android:color/black"
android:textSize="18dp"
android:gravity="center"
android:text="5" />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray"/>
<TextView
android:id="@+id/btn_price_6"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:text="6"
android:textColor="@android:color/black"
android:textSize="18dp"
android:gravity="center"/>
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/text_dark_gray"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<TextView
android:id="@+id/btn_price_7"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textColor="@android:color/black"
android:textSize="18dp"
android:gravity="center"
android:text="7" />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray"/>
<TextView
android:id="@+id/btn_price_8"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textColor="@android:color/black"
android:textSize="18dp"
android:gravity="center"
android:text="8" />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray" />
<TextView
android:id="@+id/btn_price_9"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textColor="@android:color/black"
android:textSize="18dp"
android:gravity="center"
android:text="9" />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/text_dark_gray"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal" >
<TextView
android:id="@+id/btn_count_00"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textSize="18dp"
android:text="00"
android:textColor="@android:color/black"
android:gravity="center"
/>
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray" />
<TextView
android:id="@+id/btn_price_0"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:layout_weight="1"
android:textColor="@android:color/black"
android:textSize="18dp"
android:gravity="center"
android:text="0" />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray"/>
<TextView
android:id="@+id/btn_price_point"
android:layout_width="68.33dp"
android:layout_height="52dp"
android:textColor="@android:color/black"
android:textSize="18dp"
android:layout_weight="1"
android:gravity="center"
android:text="." />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="@color/text_dark_gray"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="51.6dp"
android:gravity="center"
android:id="@+id/btn_price_del"
>
<TextView
android:id="@+id/btn_price_clear"
android:text="删除"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/text_dark_gray"/>
<TextView
android:id="@+id/btn_price_shoukuan"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/calculator_button_bg"
android:textSize="18dp"
android:gravity="center"
android:text="收款" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
接下来就是activity里面的逻辑代码了:
package com.example.ruicheng.keydemo;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
editText = (EditText)findViewById(R.id.editText1);
editText.setEnabled(false);
editText.addTextChangedListener(new TradeTextWatcher(editText, null));
TextView[] mBtnkey_digits = new TextView[10];
for (int i = 0; i < 10; i++) {
String strid = String.format("btn_price_%d", i);
mBtnkey_digits[i] = (TextView)findViewById(this
.getResources().getIdentifier(strid, "id",
this.getPackageName()));
mBtnkey_digits[i].setOnClickListener(mClickListener);
}
TextView mBtnKey_sk = (TextView)findViewById(R.id.btn_price_shoukuan);
TextView mBtnKey_00 = (TextView)findViewById(R.id.btn_count_00);
TextView mBtnKey_point = (TextView)findViewById(R.id.btn_price_point);
LinearLayout mBtnKey_del = (LinearLayout)findViewById(R.id.btn_price_del);
mBtnKey_00.setOnClickListener(mClickListener);
mBtnKey_point.setOnClickListener(mClickListener);
mBtnKey_del.setOnClickListener(mClickListener);
mBtnKey_sk.setOnClickListener(mClickListener);
}
private View.OnClickListener mClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
int id = view.getId();
if (id == R.id.btn_price_1
|| id == R.id.btn_price_2
|| id == R.id.btn_price_3
|| id == R.id.btn_price_4
|| id == R.id.btn_price_5
|| id == R.id.btn_price_6
|| id == R.id.btn_price_7
|| id == R.id.btn_price_8
|| id == R.id.btn_price_9
|| id == R.id.btn_price_0
|| id == R.id.btn_count_00) {
String input = ((TextView) view).getText().toString();
if (input == null){
editText.setText(input);
}else if (input != null) {
String strTmp = editText.getText().toString();
strTmp += input;
editText.setText(strTmp);
}
editText.setTextSize(30);
editText.setTextColor(Color.BLACK);
}else if (id == R.id.btn_price_point)//点
{
String inputa = ((TextView) view).getText().toString();
if (inputa == null){
editText.setText(inputa);
}else if (inputa != null) {
String strTmp = editText.getText().toString();
strTmp += inputa;
editText.setText(strTmp);
}
editText.setTextSize(30);
editText.setTextColor(Color.BLACK);
} else if (id == R.id.btn_price_shoukuan) {//收款
Toast.makeText(MainActivity.this, "点击了收款", Toast.LENGTH_SHORT).show();
} else if (id == R.id.btn_price_del) {//清除
if (editText.getText().length() > 0) {
String strTmp = editText.getText().toString();
strTmp = strTmp.substring(0, strTmp.length() - 1);
editText.setText(strTmp);
}else {
editText.setText("");
}
editText.setTextSize(30);
editText.setTextColor(Color.BLACK);
}
}
};
public static class TradeTextWatcher implements TextWatcher {
private EditText mEditText;
// private TextView mTextView;
public TradeTextWatcher(EditText edit, TextView text) {
mEditText = edit;
// mTextView = text;
}
@Override
public void afterTextChanged(Editable arg0) {
int len = mEditText.getText().length();
mEditText.setSelection(len);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
}
}
}
运行结果如下
逻辑很清楚了,大家直接看源码吧