EditText詳細介紹

EditText是接受用戶輸入信息的最重要控件。今天,我們來對一些常見屬性進行講述一下,讓大家對該控件有更深刻的瞭解。要實現的效果圖如下所示:

最上面TextView顯示下面EditText的內容,並且對EditText立面拒絕複製及粘貼,同時EditText中的刪除符號能夠刪除已輸入的內容。

首先,貼出該工程activity_main的配置信息:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:gravity="center"
        android:layout_gravity="center"
        android:layout_marginTop="10dp"  />
	<LinearLayout android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
             android:layout_marginRight="30dp"
             android:layout_marginLeft="30dp"
             android:orientation="horizontal"
             android:gravity="center"
             android:background="@drawable/ic_search_gray" >
	    <EditText 
	        android:id="@+id/et1"
	        android:layout_width="fill_parent"
	        android:layout_height="wrap_content"
	        android:layout_weight="1"
	        android:textSize="13sp"
	        android:hint="input a number or charactor"
	        android:paddingLeft="@dimen/search_hint_padding_left_new"
	        android:textColor="@color/input_text"
	        android:textColorHint="@color/hint_input_text"
	        android:singleLine="true"
	        android:background="@null"
	        android:imeOptions="actionDone" />
	    <Button 
	        android:id="@+id/button_clear"
	        android:layout_width="30dp"
	        android:layout_height="30dp"
	        android:background="@drawable/ic_search_cancel"
	        android:visibility="invisible"
	        android:paddingRight="8dp" />
	</LinearLayout>
    

</LinearLayout>

values下面有如下配置文件,分別爲:color.xml,dimens.xml,strings.xml等,第一個配置文件專門設置控件顏色、第二個設置距離、第三個設置字符串,尤其對中文有效。三個文件內容分別爲:

color.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="input_text">#000000</color>
    <color name="hint_input_text">#33000000</color>
</resources>

dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="search_hint_padding_left_new">12dip</dimen>
    <dimen name="cancel_btn_maginRight">8dp</dimen>
</resources>

strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">MyEditText</string>
    <string name="hello_world">Hello world!</string>
	<string name="tishi">only input number or digit</string>
</resources>

源代碼MainActivity.java如下:

package com.example.myedittext;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextWatcher;
import android.view.ActionMode;
import android.view.ActionMode.Callback;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

	EditText searchEditText;
	Button clearButton;
	TextView tvShow;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		searchEditText = (EditText)findViewById(R.id.et1);
		clearButton = (Button)findViewById(R.id.button_clear);
		tvShow = (TextView)findViewById(R.id.tv1);
		//設置爲中文
		searchEditText.setInputType(EditorInfo.TYPE_CLASS_TEXT);
		//中文或者英文都看成一個字符長度
		//配置文件可以設置:android:maxLength = "10"
		searchEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});
		//設置爲英文
//		et.setInputType(EditorInfo.TYPE_TEXT_VARIATION_URI);

		clearButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				searchEditText.setText("");
			}
		});
		searchEditText.addTextChangedListener(mTextWatcher);
		searchEditText.setCustomSelectionActionModeCallback(new Callback() {
			
			@Override
			public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
				// TODO Auto-generated method stub
				return false;
			}
			
			@Override
			public void onDestroyActionMode(ActionMode arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public boolean onCreateActionMode(ActionMode arg0, Menu arg1) {
				// TODO Auto-generated method stub
				return false;
			}
			
			@Override
			public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
				// TODO Auto-generated method stub
				return false;
			}
		});
		searchEditText.setLongClickable(false);
	}
	
	//TextWatcher專門用來監聽文本變化
	/*TextWatcher自身是一個接口,
	首先需要實現這個接口並覆蓋其三個方法,
	分別爲Text改變之前,改變之後以及改變的過程中各自發生的動作相應*/
	TextWatcher mTextWatcher = new TextWatcher() {

		@Override
		public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
			// TODO Auto-generated method stub
			tvShow.setText(arg0);
		}
		
		@Override
		public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
			// TODO Auto-generated method stub
			System.out.println("監聽EditText內容發生變化"+arg0);
		}
		
		@Override
		public void afterTextChanged(Editable arg0) {
			// TODO Auto-generated method stub
			System.out.println("這裏實現輸入內容即顯示");
			System.out.println(searchEditText.getText().toString());
			if(searchEditText.getText().toString() != null && !searchEditText.getText().toString().equals("")){
				clearButton.setVisibility(View.VISIBLE);
			} else{
				clearButton.setVisibility(View.INVISIBLE);
				tvShow.setText("Hello world!");
			}
		}
	};
}

實現如上效果,兩張圖片分別爲:
 

下面,我們來對各屬性進行詳細解釋,如有不足之處,請大家指出來。

android:imeOptions="actionDone"  設置彈出輸入法,軟鍵盤右下角顯示完成;如果想顯示爲下一步,可改成actionNext。

android:visibility="invisible" 設置爲不可見

android:singleLine="true" 設置成只能顯示一行

android:maxLength = "10" 設置成最多隻能輸入10個字符

searchEditText.setInputType(EditorInfo.TYPE_CLASS_TEXT); 這行代碼使得點擊輸入框,彈出的軟鍵盤默認輸入法爲中文;若想彈出默認輸入法爲英文,可改成searchEditText.setInputType(EditorInfo.TYPE_TEXT_VARIATION_URI);

對EditText的複製黏貼功能進行屏蔽,只需屏蔽EditText的長按響應就ok了:searchEditText.setLongClickable(false);

其他的代碼,大家可以參考註釋,或者Android的sdk文檔進行查看。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章