EditText

只能输入小数点后两位

public static void setPricePoint(final EditText editText) {
        editText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                        s = s.toString().subSequence(0,
                                s.toString().indexOf(".") + 3);
                        editText.setText(s);
                        editText.setSelection(s.length());
                    }
                }
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    editText.setText(s);
                    editText.setSelection(2);
                }

                if (s.toString().startsWith("0")
                        && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                        editText.setText(s.subSequence(0, 1));
                        editText.setSelection(1);
                        return;
                    }
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }

        });

    }

设置EditText内部文字被锁定不可删除和修改,而文字只能在后面输入

就是通过重写EditText来实现,编写一个类来继承EditText,去覆盖其中的onDarw()方法,具体用法如下:

package com.pandastudios.pandastudios;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.EditText;
/**
 * Created by loonggg on 15/8/29.
 */
public class MyEditText extends EditText{
    private String str;
    public MyEditText(Context context){
        super(context);
    }
    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public MyEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }
    public MyEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    public void setStr(String str){
        this.str = str;
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint =  new Paint();
        paint.setTextSize(30);
        paint.setColor(Color.BLACK);
        paint.setAntiAlias(true);
        //编写提示文字。
        canvas.drawText(str,2,getHeight()/2+5,paint);
        super.onDraw(canvas);
    }
}

然后在布局文件中这么使用:

<com.pandastudios.pandastudios.MyEditText
       android:id="@+id/myEditText"
       android:layout_width="wrap_content"
       android:paddingLeft="20dp"
       android:layout_height="wrap_content" />

当然即使是重写了也得需要使用android:paddingLeft属性根据提示文字的宽度设定开始输入文字的位置。

只读的EditText控件

首先说明一下需求:该EditText只会禁止输入,但是可以查看,滚动和触摸什么的都会响应,也就是说仅仅是禁止输入而已!不妨称之为只读模式。

 怎么制作出一个这样子的EditText呢?网上有很多办法,我几乎都一一试过,但是所使用的方法都无法达到满意。比如:

(1)如果通过设定android:editable属性来使EditText不可输入。这个虽然能完美的达到要求。但是,当EditText又需要恢复可输入状态时,没有相应的动态代码来恢复!

(2)如果使用android:enabled属性,则会使EditText整个不可用,也就是说不仅不可输入,连滚动什么的都不用了。

 最后,理了理思路,终于解决了这个问题。达到我的预期:即EditText只读模式达到了,在恢复其可编辑状态时也能很容易的恢复。

我的做法如下:

  • 制作出一个只读模式的EditText

其实很简单进行下面两步设定即可:
(1)只读模式,当然不需要显示光标了。在xml中设置如下

 android:cursorVisible="false“

只读模式当然不需要弹出输入法了,输入法不弹出,当然就不能编辑了。为了点到EditText不让弹出输入法,我们只需让其对触摸事件不响应即可

android:focusableInTouchMode="false"

面两步简单的设定,就可以让EditText为只读模式了。

  • 然后恢复EditText为可编辑:

根据上面的设定,因此想要将EditText恢复为可编辑状态,只需要下面两行代码即可:

editText.setFocusableInTouchMode(true);
editText.setCursorVisible(true);

另外需要说明的是,也可以利用下面的方法动态的设定EditText的可输入与不可输入状态。
动态设定EditText不可输入任何字符

//设置EditText不可输入。但保留滑动,可点击等属性。只是不可输入而已
        et.setFilters(new InputFilter[] { new InputFilter() {

            @Override
            public CharSequence filter(CharSequence source, int start,
                    int end, Spanned dest, int dstart, int dend) {
                return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
            }
            } });

这样,利用上面的代码,即使你利用输入键盘输入,也无法输入到EditText中。对应的,相应的恢复输入可采用下面的代码:

//设置输入法可以输入(或者叫恢复输入)
            et.setFilters(new InputFilter[] { new InputFilter() {

                public CharSequence filter(CharSequence source, int start,
                        int end, Spanned dest, int dstart, int dend) {
                    // TODO Auto-generated method stub
                    return null;
                }
                } });

监听EditText的输入:TextWatcher

Et.addTextChangedListener(new TextWatcher() {
             //S:变化后的所有字符;start:字符起始的位置;before: 变化之前的总字节数;count:变化后的字节数
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }
       //s:变化前的所有字符; start:字符开始的位置; count:变化前的总字节数;after:变化后的字节数
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }
      //s:变化后的所有字符
            public void afterTextChanged(Editable s) {
            }
        });

设置EditText显示为密码格式

有两种方式,即在xml中和利用代码动态设定。如下:
- 方式一

android:inputType="textPassword"
  • 方式二
edit.setTransformationMethod(PasswordTransformationMethod.getInstance());

inputType即为输入字符的类型。在这里网上有个很好的总结,如下:

android:inputType参数类型说明
android:inputType="none"--输入普通字符
android:inputType="text"--输入普通字符
android:inputType="textCapCharacters"--输入普通字符
android:inputType="textCapWords"--单词首字母大小
android:inputType="textCapSentences"--仅第一个字母大小
android:inputType="textAutoCorrect"--前两个自动完成
android:inputType="textAutoComplete"--前两个自动完成
android:inputType="textMultiLine"--多行输入
android:inputType="textImeMultiLine"--输入法多行(不一定支持)
android:inputType="textNoSuggestions"--不提示
android:inputType="textUri"--URI格式
android:inputType="textEmailAddress"--电子邮件地址格式
android:inputType="textEmailSubject"--邮件主题格式
android:inputType="textShortMessage"--短消息格式
android:inputType="textLongMessage"--长消息格式
android:inputType="textPersonName"--人名格式
android:inputType="textPostalAddress"--邮政格式
android:inputType="textPassword"--密码格式
android:inputType="textVisiblePassword"--密码可见格式
android:inputType="textWebEditText"--作为网页表单的文本格式
android:inputType="textFilter"--文本筛选格式
android:inputType="textPhonetic"--拼音输入格式
android:inputType="number"--数字格式
android:inputType="numberSigned"--有符号数字格式
android:inputType="numberDecimal"--可以带小数点的浮点格式
android:inputType="phone"--拨号键盘
android:inputType="datetime"
android:inputType="date"--日期键盘
android:inputType="time"--时间键盘

EditText属性详解

  • android:gravity="top"

这个属性为top可以将光标置于左上角(当EditText设为全屏时)

  • android:background="@null"

这个属性为null可以将输入的框线去掉

  • android:textCursorDrawable="@drawable/ic_launcher"

这个属性可以设置光标为drawable样式(可以为一张图片)

  • android:editable="false" 

这个属性为false,则EditText不可编辑。注意是仅仅不能进行输入,但是EditText的滚动什么的还是可以响应的。

  • android:enabled="false"

这个属性为false,则EditText也是不可编辑。注意不仅不可编辑,连滚动什么的都不可以响应,所以可以说是直接让EditText不可用。

  • android:cursorVisible="false“

这个属性为false,则EditText的光标不可见。

  • android:focusableInTouchMode="false"

这个属性为false,则EditText不响应触摸模式的焦点,或者说触摸事件不可用。

Android开发之EditText属性详解 - 开发园地 - 博客频道 - youkuaiyun.com
http://blog.youkuaiyun.com/qq435757399/article/details/7947862

引用:
Android EditText监听小数点让用户只能输入小数点后两位 - Android移动开发技术文章_手机开发 - 红黑联盟
怎样设置EditText内部文字被锁定不可删除和修改,而文字只能在后面输入
关于EditText的一点深入的了解 - fuly - 博客园

Android开发之EditText属性详解 - 开发园地 - 博客频道 - youkuaiyun.com
http://blog.youkuaiyun.com/qq435757399/article/details/7947862

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值