如何实现android EditText允许输入字母和数字,同时默认弹出数字键盘?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现android EditText允许输入字母和数字,同时默认弹出数字键盘?相关的知识,希望对你有一定的参考价值。

参考技术A

这个问题看似简单,不过由于android输入法的开放性,许多输入法相关的参数设置是由第三方输入法来实现的,而第三方输入法众多、实现不一,导致这个问题变得很复杂。
结论是,目前来看,并没有直接的方法,可以对所有输入法实现上述需求。
不过针对这个问题,我们有以下几种处理方案:

设置android:digits属性,允许输入数字和字母。
设置android:inputType为"number",将键盘切换为数字键盘。
这里的关键是,虽然单独设置android:inputType="number"时,只允许输入数字;但同时设置android:inputType和android:digits时,允许输入的字符是以android:digits为准的。

当输入法本身的UI允许在数字键盘、字母键盘间切换时,该方案是有效的;但是一些输入法的数字键盘不能切换到字母键盘,该方案失效;特别是,Android5.0的原生输入法就是如此,数字键盘UI没有提供切换到其他键盘的按钮。

虽然该方案对一些输入法(尤其是英文输入法)无效,但是中文输入法基本都是有效的。如果APP仅在国内用的,这个方案够用了

方案一失效的主要原因是,输入法界面中没有提供切换键盘的按键,所以我们可以自己添上按键。
带来的问题是,自己添加按键,很难与输入法保持统一的UI风格;而当输入法本身有键盘切换按键时,这个方案是画蛇添足,既怪异又不美观。 所以这个方案在UI上有严重缺陷,并不实用。
效果图如下:

Activity如下:

activity_main.xml如下:

自定义键盘可以彻底解决问题,是最完美的方案;但是复杂度有点高。

默认弹出数字键盘真的有那么重要么?没有的话,干脆不要折腾了,StackOverflow上那么多人已经证明这个问题无完美解了。

android布局_EditText

实现内容:

1.如何使用圆角输入框和按钮背景 
2.如何实现“手机号”、“密码”后面的竖线 
3.如何监听输入框的输入事件及删除按钮的动态显示隐藏

1.如何使用圆角输入框和按钮背景

安卓为开发者准备了shape这个xml标签,用于自定义一些形状。 
那么我就来定义一个白色的输入框背景。代码如下:

    <!-- 形状 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#ffffff" />
    <!-- 边框 -->
    <stroke
        android:width="1dip"
        android:color="#ffffff" />
    <!-- 内填充颜色 -->
    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
    <!-- 圆角 -->
    <corners android:radius="6dp" />

</shape>

将其设置成任何View的background就可以了

android:background="@drawable/shape_wihte_frame"

2.如何实现“手机号”、“密码”后面的竖线

这个其实很简单,只需书写一个竖线即可,宽度为1dp或者1px(或你认为更合适的数值)。

 <View
                android:id="@+id/view1"
                android:layout_width="1dip"
                android:layout_height="fill_parent"
                android:layout_centerVertical="true"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="2dp"
                android:layout_marginRight="2dp"
                android:layout_toRightOf="@+id/textView1"
                android:background="#EEEFFF" />

3.如何监听输入框的输入事件及删除按钮的动态显示隐藏

思想很简单,就是监听EditText的输入事件,之后如果输入长度大于0就显示后面的删除按钮,如果=0就隐藏删除按键,点击删除按钮就清空输入框。在这里我写出了一个工具类方便大家调用。高内聚低耦合是我们共同的追求。

public class EditTextClearTools {
    public static void addclerListener(final EditText e1, final ImageView m1) {

        e1.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                // 监听如果输入串长度大于0那么就显示clear按钮。
                String s1 = s + "";
                if (s.length() > 0) {
                    m1.setVisibility(View.VISIBLE);
                } else {
                    m1.setVisibility(View.INVISIBLE);
                }

            }
        });

        m1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                // 清空输入框
                e1.setText("");

            }
        });

    }

}

 

主程序代码

public class MainActivity extends Activity {
    EditText e1, e2;
    ImageView m1, m2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_user_login);
        init();
    }

    private void init() {
        // TODO Auto-generated method stub
        e1 = (EditText) findViewById(R.id.phonenumber);
        e2 = (EditText) findViewById(R.id.password);
        m1 = (ImageView) findViewById(R.id.del_phonenumber);
        m2 = (ImageView) findViewById(R.id.del_password);
        // 添加监听器
        EditTextClearTools.addclerListener(e1, m1);
        EditTextClearTools.addclerListener(e2, m2);

    }

}

代码连接http://download.csdn.net/detail/androidmsky/9274037

转载于http://blog.csdn.net/androidmsky/article/details/49870823

 




以上是关于如何实现android EditText允许输入字母和数字,同时默认弹出数字键盘?的主要内容,如果未能解决你的问题,请参考以下文章

Android 系统搜索框 如何限制输入字数长度?

如何在 android 的 EditText 上显示数字键盘?

EditText设置下划线提示字颜色输入字体颜色及问题

EditText设置下划线提示字颜色输入字体颜色及问题

android布局_EditText

如何使 EditText 小于默认值?