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>

效果图:

 

posted @ 2016-01-03 00:38  会飞的一只狼  阅读(645)  评论(0编辑  收藏  举报