android基本控件学习-----EditText
EditText的讲解
一、《实例一》:用户登录
<?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="match_parent" android:orientation="vertical" android:background="#ffffff" android:gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" android:background="@drawable/txt_radiuborder" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:orientation="vertical" android:paddingLeft="20dp" android:paddingRight="20dp"> <EditText android:id="@+id/edit1" android:layout_width="match_parent" android:layout_height="100dp" android:drawableLeft="@mipmap/ic_account" android:drawablePadding="60px" android:padding="5px" android:singleLine="true" android:hint="用户名" android:textColorHint="#98f5ff" android:textSize="30sp"/> <EditText android:id="@+id/edit2" android:layout_width="match_parent" android:layout_height="100dp" android:drawableLeft="@mipmap/ic_password" android:drawablePadding="60px" android:padding="5px" android:singleLine="true" android:hint="密码" android:textColorHint="#98f5ff" android:textSize="30sp"/> </LinearLayout> <Button android:layout_width="match_parent" android:layout_height="80dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="30dp" android:text="登录" android:textSize="30sp" android:textColor="#000000" android:textStyle="bold" android:background="@drawable/txt_radiuborder"/> </LinearLayout>
属性说明:很多属性和TextView相同就不做过多的解释,这里就对这两个属性进行说明:
android:hint="默认提示文本" android:textColorHint="#95A1AA",第一个属性设置提示信息,第二个属性设置提示信息的颜色
二、常用的属性详解
(1)获得焦点后选择所有的文本内容android:selectAllOnFocus="true"
(2)限制EditText的输入类型android:inputType="phone"
类型描述:文本型
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"//时间键盘
(3)设置最小行,最大行,单行,多行,自动换行
最小行的行数:android:minLines="3"
最大的行数:android:maxLines="3"
设置字与字的水平间隔:android:textScaleX="1.5"
设置字与字的垂直间隔:android:textScaleY="1.5"
设置英文字母大写类型的属性:android:capitalize 默认none,还有三个可选项
- sentences:仅第一个字母大写
- words:每一个单词首字母大小,用空格区分单词
- characters:每一个英文字母都大写
(4)EditText四周的间隔距离与内部文字与边框间的距离:和TextView一样padding
(5)EditText的光标控制:在Java代码中使用setSelection(int index)或者setSelection(int start,int end),其中一个参数的是设置光标位置的,两个参数的是设置起始位置与结束位置的中间括的部分,即部分选中!
当然我们也可以调用setSelectAllOnFocus(true);让EditText获得焦点时选中全部文本!
另外我们还可以调用setCursorVisible(false);设置光标不显示
还可以调用getSelectionStart()和getSelectionEnd获得当前光标的前后位置
三、实例二:带有表情文本输入框
布局文件
<?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="match_parent" android:orientation="vertical" android:background="#ffffff" android:gravity="center"> <Button android:id="@+id/btn1" android:layout_width="match_parent" android:layout_height="80dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="30dp" android:text="添加表情" android:textSize="30sp" android:textColor="#000000" android:textStyle="bold" android:background="@drawable/txt_radiuborder"/> <EditText android:id="@+id/edit1" android:layout_width="match_parent" android:layout_height="100dp" android:padding="5px" android:singleLine="true"/> </LinearLayout>
Java文件:
import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.SpannableString; import android.text.Spanned; import android.text.style.ImageSpan; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { private EditText editText1; private Button btn1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText1 = (EditText) findViewById(R.id.edit1); btn1 = (Button) findViewById(R.id.btn1); // 设置监听事件 btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SpannableString ss = new SpannableString("img"); Drawable drawable = MainActivity.this.getResources().getDrawable(R.mipmap.ic_launcher); drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight()); ImageSpan imageSpan = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE); ss.setSpan(imageSpan,0,3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); int cursor = editText1.getSelectionStart(); editText1.getText().insert(cursor,ss); } }); } }
效果图:
四、实例三:带有删除按钮的文本输入框(自定义输入框)
自定义组件的Java代码:
package com.example.test3; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; /** * Created by coder-tu on 2016/1/3. * 自定义带有删除按钮的EditText */ public class EditTextWithDel extends EditText { private final static String TAG = "EditTextWithDel"; // 定义删除图标 private Drawable drawable; 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() { drawable = mContext.getResources().getDrawable(R.mipmap.delete); addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { setDrawable(); } }); setDrawable(); } /** * 设置删除图片 */ private void setDrawable() { if (length() < 1) { setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); } else { setCompoundDrawablesWithIntrinsicBounds(null, null, drawable, null); } } /** * 处理删除事件 */ @Override public boolean onTouchEvent(MotionEvent event) { if(drawable != 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(); } }
在布局文件中使用
<?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="match_parent" android:orientation="vertical" android:background="#ffffff" android:gravity="center"> <com.example.test3.EditTextWithDel android:layout_width="match_parent" android:layout_height="50dp" android:hint="带有删除按钮的EditText"/> </LinearLayout>
效果图: