android 自定义纯数字键盘输入

本文介绍了一种自定义数字键盘的实现方法,用于输入金额,包括界面布局设计和逻辑代码实现,适用于Android应用开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久没更新博客了,最近在做一个新项目,遇到了很多坑,现将遇到的坑学到的东西一个个记录下来,方便自己和大家共同学习。后面还会抽出时间将项目中遇到的其他问题一一上传分析。

项目中需要使用自定义数字键盘输入金额,效果图如下

这里写图片描述

最初想偷懒在网上找个 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) {

        }

    }
}

运行结果如下

这里写图片描述

逻辑很清楚了,大家直接看源码吧

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值