40995Android軟件開發(fā)之EditText 詳解
EditText在API中的結(jié)構(gòu)
java.lang.Object
android.view.View
android.widget.TextView
android.widget.EditText
已知直接子類:
AutoCompleteTextView, ExtractEditText
已知間接子類:
MultiAutoCompleteTextView
EditText是TextView的直接子類 所以EditText會(huì)繼承父類TextView的一些方法。下面我用自己寫的一個(gè)Demo 和大家詳細(xì)的說明一下EditView的使用方法。
1.簡(jiǎn)單的EditText輸入框
非常簡(jiǎn)單,在layout布局中配置一下EditText 在配置一個(gè)Button 在代碼中監(jiān)聽Button 的事件 獲取當(dāng)前EditView中輸入的內(nèi)容并且顯示出來。
- <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textviewll"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:id="@+id/sample_edit_text0"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="簡(jiǎn)單的EditText輸入框"/>
<Button
android:id="@+id/sample_button0"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="確定"/>
</LinearLayout>
復(fù)制代碼 - public class SampleActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.sample);
final EditText editText0 = (EditText)findViewById(R.id.sample_edit_text0);
Button button0 = (Button)findViewById(R.id.sample_button0);
button0.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String str = editText0.getText().toString();
Toast.makeText(SampleActivity.this,str, Toast.LENGTH_LONG).show();
}
});
super.onCreate(savedInstanceState);
}
}
復(fù)制代碼 2.限制EditText輸入框的內(nèi)容
在layout中配置信息
android:digits="1234567890.+-*/%
()"
限制輸入框中只能輸入自己定義的這些字符串 如果輸入其它將不予以顯示
android:phoneNumber="true"
限制輸入框中只能輸入手機(jī)號(hào)碼
android:password="true"
限制輸入框中輸入的任何內(nèi)容將以"*"符號(hào)來顯示
android:hint="默認(rèn)文字"
輸入內(nèi)容前默認(rèn)顯示在輸入框中的文字
android:textColorHint="#FF0000"
設(shè)置文字內(nèi)容顏色
android:enabled="false"
設(shè)置輸入框不能被編輯
3.編輯框中顯示圖片
上一篇講TextView中就講過在TextView中添加圖片的方法,因?yàn)镋ditText是TextView的子類, 所以當(dāng)然也可以添加圖片了,只是一旦在EditText中添加圖片以后是不能刪除的,如圖所示我可以編輯圖片旁邊的內(nèi)容,寫入文字。
- <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textviewll"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="在圖片下方"
android:textColor="#FF0000"
android:drawableBOTTom="@drawable/jay"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
>
</EditText>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="在圖片上方"
android:textColor="#FF0000"
android:drawableTop="@drawable/jay"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
>
</EditText>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="在圖片左邊"
android:textColor="#FF0000"
android:drawableLeft="@drawable/jay"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
>
</EditText>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="在圖片右邊"
android:textColor="#FF0000"
android:drawableRight="@drawable/jay"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
>
</EditText>
</RelativeLayout >
復(fù)制代碼 4.設(shè)置軟鍵盤的Enter鍵
如圖所示我們可以修改軟鍵盤的Enter按鈕的樣式,可以在代碼中監(jiān)聽 按鈕點(diǎn)擊事件。
- package cn.m15.xys;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.TextView.OnEditorActionListener;
public class KeyBoardActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.keyboard);
EditText editText0 = (EditText)findViewById(R.id.txtTest0);
editText0.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
if (arg1 == EditorInfo.IME_ACTION_GO) {
Toast.makeText(KeyBoardActivity.this, "你點(diǎn)了軟鍵盤去往按鈕",
Toast.LENGTH_SHORT).show();
}
return false;
}
});
EditText editText1 = (EditText)findViewById(R.id.txtTest1);
editText1.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
if (arg1 == EditorInfo.IME_ACTION_SEARCH) {
Toast.makeText(KeyBoardActivity.this, "你點(diǎn)了軟鍵盤搜索按鈕",
Toast.LENGTH_SHORT).show();
}
return false;
}
});
EditText editText2 = (EditText)findViewById(R.id.txtTest2);
editText2.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
if (arg1 == EditorInfo.IME_ACTION_SEND) {
Toast.makeText(KeyBoardActivity.this, "你點(diǎn)了軟鍵盤發(fā)送按鈕",
Toast.LENGTH_SHORT).show();
}
return false;
}
});
EditText editText3 = (EditText)findViewById(R.id.txtTest3);
editText3.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
if (arg1 == EditorInfo.IME_ACTION_NEXT) {
Toast.makeText(KeyBoardActivity.this, "你點(diǎn)了軟鍵盤下一個(gè)按鈕",
Toast.LENGTH_SHORT).show();
}
return false;
}
});
EditText editText4 = (EditText)findViewById(R.id.txtTest4);
editText4.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
if (arg1 == EditorInfo.IME_ACTION_DONE) {
Toast.makeText(KeyBoardActivity.this, "你點(diǎn)了軟鍵盤完成按鈕",
Toast.LENGTH_SHORT).show();
}
return false;
}
});
EditText editText5 = (EditText)findViewById(R.id.txtTest5);
editText5.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
if (arg1 == EditorInfo.IME_ACTION_UNSPECIFIED) {
Toast.makeText(KeyBoardActivity.this, "你點(diǎn)了軟鍵盤未指定按鈕",
Toast.LENGTH_SHORT).show();
}
return false;
}
});
super.onCreate(savedInstanceState);
}
}
復(fù)制代碼
監(jiān)聽軟鍵盤的點(diǎn)擊事件 - <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textviewll"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText android:id="@+id/txtTest0"
android:imeOptions="actionGo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="特殊按鈕-去往"
></EditText>
<EditText android:id="@+id/txtTest1"
android:imeOptions="actionSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="特殊按鈕-搜索"
></EditText>
<EditText android:id="@+id/txtTest2"
android:imeOptions="actionSend"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="特殊按鈕-發(fā)送"
></EditText>
<EditText android:id="@+id/txtTest3"
android:imeOptions="actionNext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="特殊按鈕-下一個(gè)"
></EditText>
<EditText android:id="@+id/txtTest4"
android:imeOptions="actionDone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="特殊按鈕-完成"
></EditText>
<EditText android:id="@+id/txtTest5"
android:imeOptions="actionUnspecified"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="特殊按鈕-未指定"
></EditText>
</LinearLayout>
復(fù)制代碼 5.監(jiān)聽軟鍵盤的按鍵事件
做項(xiàng)目的時(shí)候 有時(shí)候須要在用戶輸入內(nèi)容時(shí)做檢測(cè),比如如果用戶輸入不合法的內(nèi)容不予以顯示在EditText中, 這時(shí)候我就要用到addTextChangedListener 用它來監(jiān)聽用戶輸入狀態(tài)??梢栽诒O(jiān)聽中改變用戶輸入的內(nèi)容或者提示用戶輸入內(nèi)容不合法等等。 如圖所示我的每次輸入操作都可以被正常的監(jiān)聽出來,用戶輸入內(nèi)容的正常流程 beforeTextChanged() -》onTextChanged() -》afterTextChanged()然后是通知屏幕繪制 顯示在屏幕上 所以我們可以在這三個(gè)方法中來修改用戶輸入內(nèi)容 或者截取用戶輸入的內(nèi)容。
- package cn.m15.xys;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
public class MonitorKeyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.monitorkey);
EditText editText = (EditText)findViewById(R.id.monitor_edit_text0);
final TextView textView0 = (TextView)findViewById(R.id.monitor_text0);
final TextView textView1 = (TextView)findViewById(R.id.monitor_text1);
final TextView textView2 = (TextView)findViewById(R.id.monitor_text2);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence text, int start, int before, int count) {
//text 輸入框中改變后的字符串信息
//start 輸入框中改變后的字符串的起始位置
//before 輸入框中改變前的字符串的位置 默認(rèn)為0
//count 輸入框中改變后的一共輸入字符串的數(shù)量
textView1.setText("輸入后字符串 [ " + text.toString() + " ] 起始光標(biāo) [ " + start + " ] 輸入數(shù)量 [ " + count+" ]");
}
@Override
public void beforeTextChanged(CharSequence text, int start, int count,int after) {
//text 輸入框中改變前的字符串信息
//start 輸入框中改變前的字符串的起始位置
//count 輸入框中改變前后的字符串改變數(shù)量一般為0
//after 輸入框中改變后的字符串與起始位置的偏移量
System.out.println(text.toString());
textView0.setText("輸入前字符串 [ " + text.toString() + " ]起始光標(biāo) [ " + start + " ]結(jié)束偏移量 [" + after + " ]");
}
@Override
public void afterTextChanged(Editable edit) {
//edit 輸入結(jié)束呈現(xiàn)在輸入框中的信息
textView2.setText("輸入結(jié)束后的內(nèi)容為 [" + edit.toString()+" ] 即將顯示在屏幕上");
}
});
super.onCreate(savedInstanceState);
}
}
復(fù)制代碼 - <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textviewll"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/monitor_text0"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18dip"
android:textColor="#FF0000"/>
<TextView
android:id="@+id/monitor_text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18dip"
android:textColor="#FF0000"
/>
<TextView
android:id="@+id/monitor_text2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18dip"
android:textColor="#FF0000"
/>
<EditText
android:id="@+id/monitor_edit_text0"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="監(jiān)聽軟鍵盤按鍵的輸入狀態(tài)"/>
</LinearLayout>
復(fù)制代碼 最后如果你還是覺得我寫的不夠詳細(xì) 看的不夠爽 不要緊我把源代碼的下載地址貼出來 歡迎大家一起討論學(xué)習(xí)
第五講EditText.rar(143.88 KB, 下載次數(shù): 459)[/I]2011-9-2 22:50 上傳點(diǎn)擊文件名 下載積分: 下載豆 -2 |