【5】EditText——输入框

来源:互联网 发布:淘宝短信营销资料 编辑:程序博客网 时间:2024/06/08 00:47
      public class EditText extends TextView
      EditText是一个非常重要的组件,可以说它是用户和Android应用进行数据传输窗户,有了它就等于有了一扇和Android应用传输的门,通过它用户可以把数据传给Android应用,然后得到我们想要的数据。
要点:
1、EditText是TextView的子类,所以TextView的方法和特性同样存在于EditText中。
2、输入变化事件:addTextChangeListener(TextWatcher)。
3、监听回车键:setOnEditTextActionListener。
4、选取文本。

EditText editable = editText.getText();
Selection.setSelection(editable, 1, editable.length());

1、设置默认提示文本以及提示文本颜色:

设置提示文本:
android:hint="在这边写提示文本的内容"
效果如下:

设置提示文本颜色:
android:textColorHint="#00ff00" 
效果如下:


2、获得焦点后全选组件内所有文本内容:

android:selectAllOnFocus="true"
效果如下:


3、限制EditText的输入类型:

      有时我们可能需要对输入的数据进行限制,比如输入电话号码的时候,你输入了一串字母,这显然是不符合我们预期的,而限制输入类型可以通过inputType属性来实现。举个例子,比如下面的设置就只能限制输入数字,其他字符输入无效。
android:inputType="number"
inpuType有以下几个参数:
a、文本类型,多为大小写和数字符号:
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"
b、数值类型:
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"//设置字与字的水平间隔

6、带表情的EditText的简单实现:

      相信大家对于QQ或者微信很熟悉吧,我们发送文本的时候可以连同表情一起发送,有两种简单的实现方式:1.使用SpannableString来实现;2.使用Html类来实现。这里笔者用的是第一种,这里只实现一个简单的效果,大家可以把方法抽取出来,自定义一个EditText; 也可以自己动手写个类似于QQ那样有多个表情选择的输入框!看下效果图(点击添加表情即可完成表情添加):

代码实现:
package com.example.administrator.helloworld;import android.graphics.drawable.Drawable;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.Spannable;import android.text.SpannableString;import android.text.style.ImageSpan;import android.view.View;import android.widget.Button;import android.widget.EditText;public class MainActivity_EditText extends AppCompatActivity {    private EditText editText_test;    private Button bt_add_expression;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main__edit_text);        editText_test = (EditText) findViewById(R.id.editText_test);        editText_test.requestFocus();        bt_add_expression = (Button) findViewById(R.id.button_add_expression);        bt_add_expression.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SpannableString spanStr = new SpannableString("image");                Drawable drawable = getResources().getDrawable(R.drawable.fadai);                drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());                ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);                spanStr.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);                int cursor = editText_test.getSelectionStart();                editText_test.getText().insert(cursor, spanStr);            }        });    }}
PS:对了,别忘了放上一个小图片哦~

7、设置EditText获得焦点,同时弹出小键盘

首先要在手机的设置上把实体键盘给关了,这样子才可以弹出软键盘,具体见下面图片说明:


让EditText获得焦点与清除焦点的 :
edit.requestFocus(); //请求获取焦点
edit.clearFocus(); //清除焦点
低版本的系统直接requestFocus就会自动弹出小键盘了
稍微高一点的版本则需要我们手动地去弹键盘:
 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);

8、带删除按钮的EditText

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

当我们输入内容后,右面会出现这样一个小叉叉的图标,我们点击后会清空输入框中的内容! 实现起来其实也很简单: 为EditText设置addTextChangedListener,然后重写TextWatcher()里的抽象方法,这个用于监听输入框变化的。
实现代码:
package com.example.administrator.helloworld;import android.graphics.drawable.Drawable;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.Editable;import android.text.Spannable;import android.text.SpannableString;import android.text.TextWatcher;import android.text.style.ImageSpan;import android.view.View;import android.widget.Button;import android.widget.EditText;import com.google.android.gms.appindexing.Action;import com.google.android.gms.appindexing.AppIndex;import com.google.android.gms.common.api.GoogleApiClient;public class MainActivity_EditText extends AppCompatActivity {    private EditText editText_search;    private Button bt_clear;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main__edit_text);        editText_search = (EditText) findViewById(R.id.editText_search);        editText_search.addTextChangedListener(textWatcher);        bt_clear = (Button) findViewById(R.id.button_clear);        bt_clear.setVisibility(View.INVISIBLE);        bt_clear.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                editText_search.setText("");            }        });    }    TextWatcher textWatcher = new TextWatcher() {        @Override        public void beforeTextChanged(CharSequence s, int start, int count, int after) {        }        @Override        public void onTextChanged(CharSequence s, int start, int before, int count) {        }        @Override        public void afterTextChanged(Editable s) {            if (s.length() == 0) {//当输入框没有任何东西的时候,不显示清空按钮                bt_clear.setVisibility(View.INVISIBLE);            } else {//有东西的时候,才显示清空按钮                bt_clear.setVisibility(View.VISIBLE);            }        }    };}
布局文件:
<?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.administrator.helloworld.MainActivity_EditText">    <EditText        android:id="@+id/editText_search"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_toStartOf="@+id/button_clear"        android:hint="搜索" />    <Button        android:id="@+id/button_clear"        android:layout_width="35dp"        android:layout_height="35dp"        android:layout_alignParentEnd="true"        android:layout_alignParentRight="true"        android:layout_alignTop="@+id/editText_search"        android:background="@drawable/delete" /></RelativeLayout>
运行效果:



0 0
原创粉丝点击