EditText(输入框)详解1.设置换行提示文本如下图

EditText(输入框)解读1.设置默认提示文字

如右图,相信你对这些用户登录界面并不陌生吧,我们经常使用这些界面

以下与其他相比如何?

还不错吧,其实这里就不贴布局了,这里只介绍默认提示文字的两个控件属性:

默认提示文本的两个属性如下:

android:hint="默认提示文本"
android:textColorHint="#95A1AA"

后者设置提示文字内容,前者设置提示文字颜色!

2.获得焦点后选中组件中的所有文本内容

当我们想要点击输入框获得焦点时,不是将光标连接到文本的开头或结尾,而是想要获得输入框中的所有文本内容!这时候我们可以使用selectAllOnFocus属性

android:selectAllOnFocus="true"

比如下图的疗效图:第一个设置了这个属性,第二个没有设置这个属性。设置为true的EditText获得焦点后,所有文本都被选中!

3.限制 EditText 输入类型

有时我们可能需要限制输入数据。比如输入电话号码时,输入一串字母,这似乎与我们的预期不符,而限制输入类型可以通过inputType属性来实现!

例如限制只能是电话号码、密码(textPassword):

  

可选参数如下:

文本类型,多为小写、小写和数字符号

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"  
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"//时间键盘

4.设置最小行、最大行、单行、多行、手动换行

EditText默认多行显示,也可以手动换行,即当一行无法显示时,会手动换行到第二行

我们可以限制它,例如

设置最小行数:android:minLines="3"

或者设置EditText的最大行数:android:maxLines="3"

PS:当输入内容超过maxline时,文字会自动向上滚动! !

另外,很多时候我们可能想限制EditText只允许单行输入,不能滚动,比如前面登录界面的例子,我们只需要设置

android:singleLine="true"

不用换行也可以实现单行输入

5.设置文字间距,设置英文字母的小写类型

我们可以通过以下两个属性来设置字的宽度:

android:textScaleX="1.5"    //设置字与字的水平间隔
android:textScaleY="1.5"    //设置字与字的垂直间隔

此外,EditText还为我们提供了一个属性来设置英文字母的小写类型:android:capitalize默认为none,并提供了三个可选值:

6.控制EditText周围的距离以及内部文本与边框的距离

我们使用margin相关的属性来减小组件相对于其他控件的距离,例如android:marginTop="5dp" 并使用padding来减小组件内部的文本与组件边框的距离,比如android:paddingTop="5dp"

7.设置EditText获取焦点的同时弹出一个小按钮

关于这个EditText获得焦点并弹出小按钮的问题,前不久在项目中苦恼了一段时间。要求是:进入Activity后,让EditText获得焦点,弹出小按钮供用户输入!网上的方法试了很多,不知道是不是作者使用的系统5.1的问题!总结如下:

首先是让EditText获得焦点并清除焦点

edit.requestFocus();//请求获得焦点

edit.clearFocus();//移除焦点

获得焦点后,弹出一个小按钮,我大部分时间都花在了这个上:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

第二:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);     imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);  
imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //强制隐藏键盘  

我不知道是什么原因。前面两种方法都没有弹出小按钮。作者最终使用 :windowSoftInputMode 属性解决了弹出小按钮的问题。在这里跟大家分享一下:

android:windowSoftInputModeActivity 主窗口与软键的交互模式,可用于防止输入法面板阻塞问题,Android1.5之后的新功能。

这个属性会影响两件事:

【一】当焦点形成时,软键是隐藏还是显示

[2] 是否减小活动主窗口的大小为软键腾出空间

简单点就是有焦点时的按钮控制,以及是否缩小Act的窗口大小并用它来放小按钮

以下值可供选择,可设置多个值,用“|”隔开

stateUnspecified:未指定软键的状态,系统会选择合适的状态或主题相关的设置

stateUnchanged:当这个activity出现时,软键会一直保持上一个activity的状态,无论是隐藏还是显示

stateHidden:当用户选择活动时,软键总是隐藏

stateAlwaysHidden:当Activity主窗口获得焦点时,软键始终隐藏

stateVisible:软键通常可见

stateAlwaysVisible:当用户选择activity时,软键始终显示状态

adjustUnspecified:默认设置,通常由系统决定是隐藏还是显示

adjustResize:Activity 总是调整屏幕的大小为软键腾出空间

adjustPan:将手动连接当前窗口的内容,使当前焦点永远不会被按键覆盖,用户始终可以听到部分输入

我们可以在AndroidManifest.xml中为需要弹出小按钮的Activity设置这个属性,例如:

之后就可以在EditText对象中requestFocus()了~

8.EditText 光标位置控制

有时我们可能需要在EditText中控制光标连接到指定位置或选择单个文本!

EditText为我们提供了setSelection()方法,有两种方式:

一个参数用于设置光标位置,两个参数用于设置开始位置和结束位置的中间括号,即部分选择!

其实我们也可以调用setSelectAllOnFocus(true);当 EditText 获得焦点时选择所有文本!

此外,我们还可以调用 setCursorVisible(false);设置光标不显示

也可以调用getSelectionStart()和getSelectionEnd来获取当前光标的前后位置

9.带有表情的EditText的简单实现

相信你对QQ或陌陌很熟悉。当我们发送文本时安卓输入框为空,我们可以将它们与表情符号一起发送。有两种简单的方法可以实现这一点:

1.使用 SpannableString 实现

2.使用Html类实现

这里作者使用第一个。这里只实现了一个简单的效果。可以提取方法,自定义一个EditText;

你也可以自己写一个类似于QQ的多个表情选项的输入框!

看疗效图(点击添加表情即可完成表情添加):

代码也很简单:

public class MainActivity extends Activity {
    private Button btn_add;
    private EditText edit_one;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_add = (Button) findViewById(R.id.btn_add);
        edit_one = (EditText) findViewById(R.id.edit_one);
        btn_add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                SpannableString spanStr = new SpannableString("imge");
                Drawable drawable = MainActivity.this.getResources().getDrawable(R.drawable.f045);
                drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
                ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);
                spanStr.setSpan(span,0,4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                int cursor = edit_one.getSelectionStart();
                edit_one.getText().insert(cursor, spanStr);
            }
        });
    }
}

PS:对了安卓输入框为空,别忘了放图~

10.带删除按钮的EditText

我们经常在App的输入界面上看到:

当我们输入内容时,左侧会出现这样一个小叉子图标。我们点击之后,输入框的内容就会被清空!

实现起来似乎也很简单:

为EditText设置addTextChangedListener,然后在TextWatcher()中重绘比喻方法,用于窃听输入框的变化;然后 setCompoundDrawablesWithIntrinsicBounds 设置小叉子的图片;最后,重绘onTouchEvent方法,如果点击的区域是小叉叉图片的位置,清空文字!

实现代码如下:

public class EditTextWithDel extends EditText {
    private final static String TAG = "EditTextWithDel";
    private Drawable imgInable;
    private Drawable imgAble;
    private Context mContext;
    public EditTextWithDel(Context context) {
        super(context);
        mContext = context;
        init();
    }
    public EditTextWithDel(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }
    public EditTextWithDel(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        init();
    }
    private void init() {
        imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray);
        addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void afterTextChanged(Editable s) {
                setDrawable();
            }
        });
        setDrawable();
    }
    // 设置删除图片
    private void setDrawable() {
        if (length() < 1)
            setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
        else
            setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
    }
    // 处理删除事件
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (imgInable != null && event.getAction() == MotionEvent.ACTION_UP) {
            int eventX = (int) event.getRawX();
            int eventY = (int) event.getRawY();
            Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);
            Rect rect = new Rect();
            getGlobalVisibleRect(rect);
            rect.left = rect.right - 100;
            if (rect.contains(eventX, eventY))
                setText("");
        }
        return super.onTouchEvent(event);
    }
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
}

本节总结:

本节介绍AndroidUI控件中的EditText(输入框)控件。有很多用途。事实上,以上情况肯定不能满足实际需要。在实际开发中,我们可能需要根据自己的需要自定义EditText!其实这涉及到自定义控件的中间话题。在进阶部分,我们将详细讲解Android中的自定义控件!我现在可以用了~

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站程序 EditText(输入框)详解1.设置换行提示文本如下图 https://www.wkzy.net/game/8197.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务