Android以对话框形式制作数字软键盘示例

目录
  • 一、介绍
  • 二、布局编写
  • 三、逻辑编写

一、介绍

Android的大部分自定义软键盘主要是通过android自带控件KeyboardView实现的。

那么,有没有其他简单易上手的方法来制作一个软键盘呢?

当当当当!!!

这里就要说到对话框形式的软键盘啦,简单方便易理解!

下面,通过自定义的数字软键盘来介绍如何利用对话框实现自定义软键盘!

先看看效果!

二、布局编写

我们先来看看布局!

首先是activity_main的实现:

在这里,主界面布局非常简单,仅需要两个TextView文本框就可以啦!

注意!!!

为什么不是EditView控件来实现输入框呢?

我们知道,TextView属于文本控件,而EditView属于输入框控件,按理说咱们需要输入内容,应该选择EditView输入框控件。

但是!!!

点击EditView输入框是会自动跳出系统自带的输入法的。这样的效果,会影响我们自定义软键盘的弹出。所以我们还需要考虑如何禁用系统自动弹出的键盘。当然,这也不难实现,只需要在onCreate中加上:
tv_shownumber.setFocusable(false);
就可以禁用系统键盘啦!

在这里,使用TextView文本框来实现数据输入!

不啰嗦了!上主布局!

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="#C3F4C5">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_gravity="center"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:text="身份证:"
            android:gravity="left|center"
            android:textColor="#000000"
            android:textSize="25sp"/>
        <TextView
            android:id="@+id/tv_shownumber"
            android:onClick="show"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:hint="  请输入身份证号"
            android:background="#FFFFFF"
            android:gravity="left|center"
            android:textColor="#000000"
            android:maxLength="18"
            android:textSize="25sp"
            android:textColorHint="#B6B1B1"/>
    </LinearLayout>
</LinearLayout>

android:onClick="show" 的意思是点击文本框之后会调用show这个方法!

接下来是自定义软键盘布局!

key.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_gravity="bottom">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_margin="10dp">
        <TextView
            android:id="@+id/tv_show"
            android:layout_width="0dp"
            android:layout_weight="3"
            android:layout_height="50dp"
            android:textColor="#000000"
            android:textSize="20sp"
            android:maxLength="18"
            android:gravity="center"
            android:maxLines="18"
            android:background="@drawable/keyboard_btn"
            />
        <Button
            android:id="@+id/btn_yes"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="完成"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="25dp"
            android:layout_margin="3dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="1"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
        <Button
            android:id="@+id/btn_2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="2"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
        <Button
            android:id="@+id/btn_3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="3"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="4"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
        <Button
            android:id="@+id/btn_5"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="5"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
        <Button
            android:id="@+id/btn_6"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="6"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_7"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="7"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
        <Button
            android:id="@+id/btn_8"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="8"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
        <Button
            android:id="@+id/btn_9"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="9"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_0"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="0"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
        <Button
            android:id="@+id/btn_X"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="X"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
        <Button
            android:id="@+id/btn_del"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="←"
            android:background="@drawable/keyboard_btn"
            android:textStyle="bold"
            android:textSize="40dp"
            android:layout_margin="3dp"/>
    </LinearLayout>
</LinearLayout>

代码很长,但总结起来就是13个按键加上一个TextView文本框。这样一想是不是瞬间觉得毫无难度啦!

布局代码到这里就完成了!
如果你想让你的键盘看起来好看一些,点击有颜色变化效果,也可以给它设置样式!

这是按钮没有皮肤的样子:

这是按钮有皮肤的样子:

差别还是挺大的!

下面附上按钮样式的代码:

keyboard_btn.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <!--圆角大小-->
            <corners
                android:radius="4dp"/>
            <!--距离-->
            <padding
                android:bottom="1dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp"/>
            <!--点击边框颜色-->
            <stroke
                android:color="#81CDEF"
                android:width="4dp"/>
            <!--点击填充颜色-->
            <solid android:color="#AAE2FB"/>
        </shape>
    </item>
    <item android:state_enabled="false">
        <shape>
            <corners
                android:radius="4dp"/>
            <padding
                android:bottom="1dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp"/>
        </shape>
    </item>
    <item>
        <shape>
            <corners
                android:radius="4dp"/>
            <padding
                android:bottom="1dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp"/>
            <solid android:color="#ffffff"/>
            <stroke
                android:width="4dp"
                android:color="#A5DCA7"/>
        </shape>
    </item>
</selector>

当然,不仅键盘按钮需要皮肤,键盘本身也需要!

这是键盘没有皮肤的样子:

这是键盘有皮肤的样子:

下面是键盘样式的代码:

DialogStyle.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="DialogStyle"
        android:parent="@android:style/Theme.Dialog"
        xmlns:android="http://schemas.android.com/apk/res/android">

        <!--&lt;!&ndash; 背景颜色 &ndash;&gt;-->
        <item name="android:windowBackground">#AFE1B1</item>
        <item name="android:windowContentOverlay">@null</item>

        <!-- 浮于Activity之上 -->
        <item name="android:windowIsFloating">true</item>

        <!--&lt;!&ndash; 边框 &ndash;&gt;-->
        <item name="android:windowFrame">@null</item>
    </style>
</resources>

在这里,浮于Activity之上的设置是非常重要的!

它使得我们整个键盘的宽度也发生了改变!

关于xml文件的存放位置,我们一般将activity_main.xml和key.xml放在layout文件夹下,将keyboard_btn.xml放在drawable文件夹下,DialogStyle.xml放在values文件夹下。

三、逻辑编写

有了好看的皮囊,自然也需要有趣的灵魂!

它来了它来了!

MainActivity

package com.example.mydialog;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Dialog;
import android.os.Bundle;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private TextView tv_shownumber;
//    private EditText tv_shownumber;
    private String shownumber;
    private Dialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_shownumber = findViewById(R.id.tv_shownumber);
    }

    private String num[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9","X"};
    private String data = "";
    @Override
    public void onClick(View v) {
        shownumber  = tv_shownumber.getText().toString();
        switch (v.getId()){
            case R.id.btn_0:
                data += num[0];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_1:
                data += num[1];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_2:
                data += num[2];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_3:
                data += num[3];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_4:
                data += num[4];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_5:
                data += num[5];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_6:
                data += num[6];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_7:
                data += num[7];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_8:
                data += num[8];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_9:
                data += num[9];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_X:
                data += num[10];
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            case R.id.btn_yes:
                dialog.dismiss();
                break;
            case R.id.btn_del:
                data = data.substring(0, data.length() - 1);
                tv_shownumber.setText(data);
                tv_show.setText(data);
                break;
            default:
                break;
        }
    }

    private View inflate;
    private Button btn_0;
    private Button btn_1;
    private Button btn_2;
    private Button btn_3;
    private Button btn_4;
    private Button btn_5;
    private Button btn_6;
    private Button btn_7;
    private Button btn_8;
    private Button btn_9;
    private Button btn_X;
    private Button btn_yes;
    private Button btn_del;
    private TextView tv_show;

    public void show(View view){
        dialog =new Dialog(this,R.style.DialogStyle);
        inflate = LayoutInflater.from(this).inflate(R.layout.key, null);//动态添加布局
        btn_0 = inflate.findViewById(R.id.btn_0);
        btn_1 = inflate.findViewById(R.id.btn_1);
        btn_2 = inflate.findViewById(R.id.btn_2);
        btn_3 = inflate.findViewById(R.id.btn_3);
        btn_4 = inflate.findViewById(R.id.btn_4);
        btn_5 = inflate.findViewById(R.id.btn_5);
        btn_6 = inflate.findViewById(R.id.btn_6);
        btn_7 = inflate.findViewById(R.id.btn_7);
        btn_8 = inflate.findViewById(R.id.btn_8);
        btn_9 = inflate.findViewById(R.id.btn_9);
        btn_X = inflate.findViewById(R.id.btn_X);
        btn_yes = inflate.findViewById(R.id.btn_yes);
        btn_del = inflate.findViewById(R.id.btn_del);
        tv_show = inflate.findViewById(R.id.tv_show);

        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);
        btn_X.setOnClickListener(this);
        btn_0.setOnClickListener(this);
        btn_yes.setOnClickListener(this);
        btn_del.setOnClickListener(this);

        dialog.setContentView(inflate);
        Window dialogWindow = dialog.getWindow();

        WindowManager m = getWindowManager();
        Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
        WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
        p.dimAmount = 0f;//设置背景透明度
        dialogWindow.setGravity(Gravity.BOTTOM);
        p.width =d.getWidth();//设置键盘的宽度
        dialogWindow.setAttributes(p);
        dialog.show();
    }
}

主代码中为每个按键设置了功能,并引入了动态布局key.xml,实现了show()方法,让自定义键盘以对话框的形式弹出!

在这里,背景透明度的设置可以使键盘的出现更加平滑,这一项的设置也可以在xml中进行哦!

dialogWindow.setGravity( Gravity.BOTTOM);

这句话的作用是让我们键盘的位置位于页面底部。

到此这篇关于Android以对话框形式制作数字软键盘示例的文章就介绍到这了,更多相关Android制作数字软键盘内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android自定义输入法软键盘

    本文实例为大家分享了Android自定义输入法软键盘的具体代码,供大家参考,具体内容如下 1 功能描述 触屏设备主界面中有一个文本编辑框,底部区域固定显示一个数字键盘,键盘中除数字键外,还带有*和#键功能: 提供一个自定义的数字输入法,生成apk安装包文件,嵌入到img镜像文件中去. 2 设计实现 1.创建类名为SimpleIME,继承父类InputMethodService,实现KeyboardView.OnKeyboardActionListener接口. 2.编写键盘对象加载的.xml文件

  • Android自定义软键盘的步骤记录

    目录 效果图 实现自定义软键盘 1.通过xml定义键盘 2.将xml文件与keyboardview绑定起来 3.处理点击事件onKey 附赠一些实用的效果处理 总结 效果图 还是咱们的老规矩,先放最终效果图

  • Android 实现数字九宫格软键盘

    前言 一开始大概是这种 需求 组长说 要不搞一个自定义软键盘吧 数字搞大点 方便外卖员输入数字 我设置了输入EditText的输入格式为Number 还是不行 那就开搞吧 先来看下实现的效果图吧 实现效果GIF 实现代码 自定义View 一个NineNumericKeyboardView /** * Author by Lyu * Date on 2021/5/26-19:55 * Description:九宫格数字软键盘 */ public class NineNumericKeyboardV

  • Android以对话框形式制作数字软键盘示例

    目录 一.介绍 二.布局编写 三.逻辑编写 一.介绍 Android的大部分自定义软键盘主要是通过android自带控件KeyboardView实现的. 那么,有没有其他简单易上手的方法来制作一个软键盘呢? 当当当当!!! 这里就要说到对话框形式的软键盘啦,简单方便易理解! 下面,通过自定义的数字软键盘来介绍如何利用对话框实现自定义软键盘! 先看看效果! 二.布局编写 我们先来看看布局! 首先是activity_main的实现: 在这里,主界面布局非常简单,仅需要两个TextView文本框就可以

  • Android 自定义输入支付密码的软键盘实例代码

    Android 自定义输入支付密码的软键盘 有项目需求需要做一个密码锁功能,还有自己的软键盘,类似与支付宝那种,这里是整理的资料,大家可以看下,如有错误,欢迎留言指正 需求:要实现类似支付宝的输入支付密码的功能,效果图如下: 软键盘效果图 使用 android.inputmethodservice.KeyboardView 这个类自定义软键盘 软键盘的实现 1. 自定义只输入数字的软键盘 PasswordKeyboardView 类,继承自 android.inputmethodservice.

  • Android禁止EditText自动弹出软键盘的方法及遇到问题

    平时开发中经常遇到的很小的问题,这里记录一下. 一般在AndroidManifest.xml中添加了android:windowSoftInputMode="adjustResize"或者adjustPan的话,页面中包含EditText控件进入时会自动弹出软件盘. 1.在包含EditText的父布局中添加android:focusable="true"和android:focusableInTouchMode="true" <?xml v

  • Android View 完美实现EditText 在软键盘上边的示例

    此方法基于PopupWindow,适合需要回复内容时响应点击事件,打开软键盘,编辑框在软键盘上部. 优点,编辑框使用CleanEdittext,监听输入状态来更改回复按钮颜色,添加title等. 先展示效果 点击评论打开软键盘,编辑框在软键盘上部,点击其他区域消失收起软键盘: 1.BaseSelectPopupWindow 的代码. public class BaseSelectPopupWindow extends PopupWindow { private View popView; pri

  • Android开发中软键盘的显示和隐藏

    本篇内容通过操作软键盘的函数着手详细分析了隐藏或者显示软键盘的实现方法,并且对其中重要的代码做了详细分析. 一.开篇 如果有需要用到输入的地方,通常会有需要自动弹出或者收起软键盘的需求.开篇明义,本文会讲讲弹出和收起软键盘的一些细节,最终还会从源码进行分析. 想要操作软键盘,需要使用到 InputMethodManager ,它是一个系统服务,可以使用 Context.getSystemService() 获取到它.而很多关键的逻辑代码,都是在 InputMethodManagerService

  • Android 软键盘状态并隐藏输入法的实例

    Android 软键盘状态并隐藏输入法的实例 1 软键盘状态的切换 2 强制隐藏输入法键盘 MainActivity如下: package cc.c; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.Button

  • 页面未随软键盘上升及android隐藏软键盘总结

    就是在配置文件里对应activity加上这句:android:windowSoftInputMode="stateVisible|adjustResize" 设置之后 android:windowSoftInputMode属性介绍 android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一]当有焦点产生时,软键盘是隐藏还是显示 [二]是否减少活动主

  • Android软键盘挡住输入框的终极解决方案

    前言 开发做得久了,总免不了会遇到各种坑. 而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 最基本的情况,如图所示:在页面底部有一个EditText,如果不做任何处理,那么在软键盘弹出的时候,就有可能会挡住EditText. 对于这种情况的处理其实很简单,只需要在AndroidManifest文件中对activity设置:android:windowSoftInputMode的值adjustPan或者adjustResize即

  • 详解Android中获取软键盘状态和软键盘高度

    详解Android中获取软键盘状态和软键盘高度 应用场景 在Android应用中有时会需要获取软键盘的状态(即软键盘是显示还是隐藏)和软键盘的高度.这里列举了一些可能的应用场景. 场景一 当软键盘显示时,按下返回键应当是收起软键盘,而不是回退到上一个界面,但部分机型在返回键处理上有bug,按下返回键后,虽然软键盘会自动收起,但不会消费返回事件,导致Activity还会收到这次返回事件,执行回退操作,这时就需要判断,如果软键盘刚刚由显示变为隐藏状态,就不执行回退操作. 场景二 当软键盘弹出后,会将

随机推荐