根據寬度高度自適應文字大小,如果textview寬度太窄了,字體會自動變小
http://www.23code.com/autoscaletextview/
CreditCardEntry實現信用卡或銀行卡號數字每四位數字分隔
http://www.23code.com/creditcardentry/
IconicDroid實現圖形文字,可以像設置文字一樣,設置圖標大小和顏色。
http://www.23code.com/iconicdroid/
Emojicon
支持emojis的TextView和EditText
項目地址:https://github.com/rockerhieu/emojicon
AutoFitTextView
可固定邊界內容字體大小自適應的TextView
項目地址: https://github.com/grantland/android-autofittextview
Shimmer for Android
文字發淡光的TextView
項目地址: https://github.com/RomainPiel/Shimmer-android
JumpingBeans
文字像 Mexican beans 一樣跳動
項目地址: https://github.com/frakbot/JumpingBeans
ExpandableTextView
http://www.23code.com/expandabletextview/
Android中為TextView添加多個可點擊的文本
http://blog.csdn.net/bboyfeiyu/article/details/39051521
Android TextView中實現點擊文本超鏈接(無下劃線)的封裝類
http://blog.csdn.net/bboyfeiyu/article/details/38734103
Android開發技巧——去掉TextView中autolink的下劃線
http://blog.csdn.net/maosidiaoxian/article/details/39156563
帶清除功能的輸入框控件ClearEditText,仿IOS的輸入框
Android文本框編輯的浮動提示:FloatLabeledEditText
http://www.open-open.com/lib/view/open1414653003809.html
http://www.open-open.com/lib/view/open1409302010353.html
Advanced Android TextView
https://github.com/chiuki/advanced-textview
Animated CompoundDrawable
Text shadow
Custom font
Gradient text
Patterned text
HTML.fromHtml()
setFontFeatureSettings()
Styled string
AlignmentSpan
ClickableSpan
Rainbow span, animated
Lined paper
Emoji
EditText小記
http://www.cnblogs.com/endure/p/3690443.html
Android字體陰影
更多陰影:
http://chiuki.github.io/advanced-android-textview/#/7
strings.xml文件定義字符串中的標簽
Android TextView 自動換行問題
關于android軟鍵盤enter鍵的替換與事件監聽
軟件盤的界面替換只有一個屬性android:imeOptions,這個屬性的可以取的值有normal,actionUnspecified,actionNone,actionGo,actionSearch,actionSend,actionNext,actionDone,例如當值為actionNext時enter鍵外觀變成一個向下箭頭,而值為actionDone時enter鍵外觀則變成了“完成”兩個字。
我們也可以重寫enter的事件,方法如下:
另附: 攔截HOME按鍵
Android如何顯示音標
http://marshal.easymorse.com/archives/4087
EditText設置光標顏色
android:textCursorDrawable="@null"
EditText設置光標位置問題
EditText中有一些預置文本的時候,想把光標調到最前面,一開始是使用的setSelection(0),結果發現在三星P1000上面有問題。經過研究發現需要先調用EditText.requestFocus(),再調用setSelection(0)。否則的話,在2.x的機器上有問題,但3.x上面是好著的。
EditText橫屏時,彈出軟件盤時不進行全屏
在使用EditText進行文本輸入時,若不進行特殊的設置,使用Android自帶的軟鍵盤,該軟鍵盤會占用整個界面,那么,如何讓鍵盤只占用屏幕的一部分呢?
使用android:imeOptinos可對Android自帶的軟鍵盤進行一些界面上的設置:
同時,可能EditText添加相應的監聽器,捕捉用戶點擊了軟鍵盤右下角按鈕的監聽事件,以便進行處理。
在TextView控件中單擊鏈接彈出Activity
http://blog.csdn.net/nokiaguy/article/details/6835916
TextView中做文字按鈕實現點擊事件
http://www.eoeandroid.com/thread-168290-1-1.html
Android使用TextView實現無下劃線超鏈接
http://orgcent.com/android-textview-no-underline-hyperlink/
文本框實現搜索和清空效果
http://407827531.iteye.com/blog/1114592
為TextView添加陰影
values/styles
如何將一行文字中的某些文字點擊后跳轉到其他界面?
比如下面的這句"您還未登陸,請登錄或注冊",當點擊的“登錄”和“注冊”的時候分別跳轉到相關界面。
輕松實現在一個TextView內定義可點擊的鏈接:Android-TextView-LinkBuilder
http://www.open-open.com/lib/view/open1435647449778.html
android 設置文字不同樣式
如何將TextView中的中文設置成粗體?
在xml文件中使用android:textStyle="bold" 可以將英文設置成粗體,但是不能將中文設置成粗體,將中文設置成粗體的方法是:
TextView tv = (TextView)findViewById(R.id.TextView01);
TextPaint tp = tv.getPaint();
tp.setFakeBoldText(true);
其他還有:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 24f);//設置成24sp?
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//可能中文加粗無效
textView.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));//可能中文無效
textView.setText(Html.fromHtml("<u>"+texts[i]+"</u>"));//下劃線
textView.setTypeface(Typeface.MONOSPACE,Typeface.ITALIC);//斜體,中文有效
textView.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG );//中間加橫線
textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG );//底部加橫線
android:ellipsize = "end" ? 省略號在結尾
android:ellipsize = "start" 省略號在開頭
android:ellipsize = "middle"???? 省略號在中間
android:ellipsize = "marquee"? 跑馬燈
android:singleline = "true"
當然也可以用代碼語句:
tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));
tv.setSingleLine(true);
ellipsize和lines
不要將ellipsize和lines一起使用,否則會讓人疑惑。像上面的代碼會顯示幾行文字呢?
android:lines感覺是用于顯示文字的行數,事實上是不確切的。假如文字不滿足夠的行數呢?android:lines更適合用于設置TextView的高度,像上面的代碼指定了TextView的高度可以顯示4行文字,如果文字不滿4行,則TextView仍舊顯示4行的高度!
android:ellipsize用于當文字過長時縮略顯示,默認會縮略顯示2行!如果和android:singleLine="true"一起使用則顯示一行;但不要以為和android:lines="4"或和android:maxLines="4"一起使用會顯示4行,當試驗過了才知道仍然顯示2行!
動態顯示隱藏密碼輸入框的內容
et.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); // display password text, for example "123456"
et.setTransformationMethod(PasswordTransformationMethod.getInstance());// hide password, display "."?
如何對EditText輸入字數做限制?
或者試試這個:
或者試試這個:
用代碼控制,可以用InputFilter限定20個字符:
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});
或者這個:
android:maxLength來設置輸入的最大長度
控制輸入小數的位數
一 . 設置焦點
如果在單擊某個 EditText 的時候想讓其他的 EditText 獲得輸入的焦點,那么可以使用下面的語句,
而要獲得焦點的 EditText :
二 . 設置輸入格式過濾器
為 EditText 設置輸入的過濾器。InputFilter, 首先要注意的是對一個 EditText 的對象設置 setFilters(InputFilter[] filters) ,其參數是一個 inputFilter 數組,即對一個 EditText 你可以同時設置多個輸入過濾器。而我們平時用的時候一般設置一個過濾器就可以了,所以可以作如下使用(以輸入數字為例):
InputFilter[] mDigitsFilters = new InputFilter[1];
mDigitsFilters[0] = new DigitsKeyListener(true, true);
ps: DigitsKeyListener 第一個參數是 Sign, 如果設置為 true ,表示允許在數字最左端有負號,否則只能輸入正數;第二個參數是 decimal, 如果設置為 true, 表示允許在數字中有一個小數點存在。
最后 setFilters(mDigitsFilters); 就 OK 了,
InputFilter 是一個接口,其實現的子類有:
DateKeyListener, DateTimeKeyListener, DialerKeyListener, DigitsKeyListener, InputFilter.AllCaps, InputFilter.LengthFilter, LoginFilter, LoginFilter.PasswordFilterGMail, LoginFilter.UsernameFilterGMail, LoginFilter.UsernameFilterGeneric, NumberKeyListener, TimeKeyListener
DateKeyListener??????? For entering dates in a text field.
DateTimeKeyListener??? For entering dates and times in the same text field.
DialerKeyListener?????? For dialing-only text entry?
DigitsKeyListener?????????????? For digits-only text entry?
InputFilter.AllCaps????????????? This filter will capitalize all the lower case letters that are added through edits.
InputFilter.LengthFilter???????? This filter will constrain edits not to make the length of the text greater than the specified length.
LoginFilter????????????????? Abstract class for filtering login-related text (user names and passwords)?
LoginFilter.PasswordFilterGMail? This filter is compatible with GMail passwords which restricts characters to the Latin-1 (ISO8859-1) char set.
LoginFilter.UsernameFilterGMail????????? This filter rejects characters in the user name that are not compatible with GMail account creation.
LoginFilter.UsernameFilterGeneric??????? This filter rejects characters in the user name that are not compatible with Google login.
NumberKeyListener??????????? For numeric text entry?
TimeKeyListener???????? For entering times in a text field.
根據解釋應該不難理解,根據你自己的需要選擇吧。
實例:
EditText與InputFilter實現文本對比
????? 此功能類似于臨摹。已知被臨摹的字符串,將字符串與EditText中輸入進行
對比,輸入錯誤,則用“×”替換所輸入的字符。
參見其他:
http://www.blogjava.net/improviser/archive/2010/11/08/337501.html
http://wang-peng1.iteye.com/blog/1022523
如何設置EditText隱藏鍵盤 ?
如何設置EditText不被輸入法遮蓋 ?
如何解決軟鍵盤彈出引起的各種不適
如何隱藏Activity剛進來焦點在EditText時顯示輸入鍵盤?
一個Activity剛進來時焦點在EditText時,會彈出輸入的鍵盤,這不是我想要的,然后就想辦法隱藏掉輸入鍵盤。嘗試了EditText的clearFocus不行,也試過其它控件ruquestFocus也不行,用隱藏鍵盤的方法 http://mingkg21.iteye.com/blog/548642
不行。試試下面這種:
這個方法的意思是,只有點擊EditText時才會彈出輸入鍵盤。
教程:如何控制輸入法軟鍵盤的出現方式
TextView實現多行本文滾動
Android中我們為了實現文本的滾動可以在ScrollView中嵌入一個TextView,其實TextView自己也可以實現多行滾動的,畢竟ScrollView必須只能有一個直接的子類布局。只要在layout中簡單設置幾個屬性就可以輕松實現
? <TextView?
??? android:id="@+id/tvCWJ"?
??? android:layout_width="fill_parent"?
??? android:layout_height="wrap_content"?
??? android:scrollbars="vertical"?? <!--垂直滾動條 -->
??? android:singleLine="false"?????? <!--實現多行 -->
??? android:maxLines="15"??????????? <!--最多不超過15行 -->
??? android:textColor="#FF0000"
??? />
?? 當然我們為了讓TextView動起來,還需要用到TextView的setMovementMethod方法設置一個滾動實例,代碼如下
TextView tv = (TextView)findViewById(R.id.tvCWJ);??
tv.setMovementMethod(ScrollingMovementMethod.getInstance());
android實現TextView垂直或水平滾動
設置EditText顯示或隱藏密碼
EditView小寫轉大寫
阻止EditText一開始就獲得焦點
程序在加載視圖時總是會把輸入的焦點自動移動到第一個輸入框(這樣導致在某些機器上程序一啟動就彈出輸入法框,很是不爽),如何讓他不獲得焦點呢?
EditText.setSelected(false);
上述命令是不行的。
clearFocus() 才是可以的。
如果你是用AutoCompleteTextView
徹底隱藏軟鍵盤
tv.setCompoundDrawables()不起作用?
其實就是android:drawableLeft="@drawable/icon"啦!
Enter鍵圖標的設置
軟鍵盤的Enter鍵默認顯示的是“完成”文本,我們知道按Enter建表示前置工作已經準備完畢了,要去什么什么啦。比如,在一個搜索中,我們輸入要搜索的文本,然后按Enter表示要去搜索了,但是默認的Enter鍵顯示的是“完成”文本,看著不太合適,不符合搜索的語義,如果能顯示“搜索”兩個字或者顯示一個表示搜索的圖標多好。事實證明我們的想法是合理的,Android也為我們提供的這樣的功能。通過設置android:imeOptions來改變默認的“完成”文本。這里舉幾個常用的常量值:
EditText的取值、全選、部分選擇、獲取選中文本
?????? 下面通過一個例子來演示EditText的取值、全選、部分選擇和獲取選中文本.main.xml如下:
代碼:
自定義View控件解決android文字排版和換行的問題(轉,尚未測試)
http://www.eoeandroid.com/thread-64055-1-1.html
TextView 垂直自動滾動
http://www.cnblogs.com/vaiyanzi/archive/2011/12/06/2277791.html
在TextView中自定義鏈接
http://handroid.diandian.com/post/2011-09-11/4961075
實現TextView中文字鏈接的方式
http://aichixihongshi.iteye.com/blog/1197726
TextView 文本自動對齊
http://blog.csdn.net/hudan2714/article/details/7816692
帶清除功能的輸入框控件ClearEditText,仿IOS的輸入框
http://blog.csdn.net/xiaanming/article/details/11066685
仿微信/支付寶的密碼輸入框效果:GridPasswordView
http://www.open-open.com/lib/view/open1427959506459.html
http://www.23code.com/autoscaletextview/
CreditCardEntry實現信用卡或銀行卡號數字每四位數字分隔
http://www.23code.com/creditcardentry/
IconicDroid實現圖形文字,可以像設置文字一樣,設置圖標大小和顏色。
http://www.23code.com/iconicdroid/
Emojicon
支持emojis的TextView和EditText
項目地址:https://github.com/rockerhieu/emojicon
AutoFitTextView
可固定邊界內容字體大小自適應的TextView
項目地址: https://github.com/grantland/android-autofittextview
Shimmer for Android
文字發淡光的TextView
項目地址: https://github.com/RomainPiel/Shimmer-android
JumpingBeans
文字像 Mexican beans 一樣跳動
項目地址: https://github.com/frakbot/JumpingBeans
ExpandableTextView
http://www.23code.com/expandabletextview/
Android中為TextView添加多個可點擊的文本
http://blog.csdn.net/bboyfeiyu/article/details/39051521
Android TextView中實現點擊文本超鏈接(無下劃線)的封裝類
http://blog.csdn.net/bboyfeiyu/article/details/38734103
Android開發技巧——去掉TextView中autolink的下劃線
http://blog.csdn.net/maosidiaoxian/article/details/39156563
帶清除功能的輸入框控件ClearEditText,仿IOS的輸入框
Android文本框編輯的浮動提示:FloatLabeledEditText
http://www.open-open.com/lib/view/open1414653003809.html
http://www.open-open.com/lib/view/open1409302010353.html
Advanced Android TextView
https://github.com/chiuki/advanced-textview
Animated CompoundDrawable
Text shadow
Custom font
Gradient text
Patterned text
HTML.fromHtml()
setFontFeatureSettings()
Styled string
AlignmentSpan
ClickableSpan
Rainbow span, animated
Lined paper
Emoji
EditText小記
http://www.cnblogs.com/endure/p/3690443.html
Android字體陰影
更多陰影:
http://chiuki.github.io/advanced-android-textview/#/7

Shader shader = new LinearGradient( 0, 0, 0, textView.getTextSize(), Color.RED, Color.BLUE, Shader.TileMode.CLAMP); textView.getPaint().setShader(shader);

Bitmap bitmap = BitmapFactory.decodeResource( getResources(), R.drawable.cheetah_tile); Shader shader = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); textView.getPaint().setShader(shader);

strings.xml文件定義字符串中的標簽
Android TextView 自動換行問題
關于android軟鍵盤enter鍵的替換與事件監聽
軟件盤的界面替換只有一個屬性android:imeOptions,這個屬性的可以取的值有normal,actionUnspecified,actionNone,actionGo,actionSearch,actionSend,actionNext,actionDone,例如當值為actionNext時enter鍵外觀變成一個向下箭頭,而值為actionDone時enter鍵外觀則變成了“完成”兩個字。
我們也可以重寫enter的事件,方法如下:
TextView editText = new TextView(this); editText.setOnEditorActionListene( newTextView.OnEditorActionListener() { public boolean onEditorAction(TextView v, int actionId, KeyEvent event){ if (actionId == EditorInfo.IME_ACTION_SEND) { // 在這里編寫自己想要實現的功能 } return false; } });
另附: 攔截HOME按鍵
Android如何顯示音標
http://marshal.easymorse.com/archives/4087
EditText設置光標顏色
android:textCursorDrawable="@null"
EditText設置光標位置問題
EditText中有一些預置文本的時候,想把光標調到最前面,一開始是使用的setSelection(0),結果發現在三星P1000上面有問題。經過研究發現需要先調用EditText.requestFocus(),再調用setSelection(0)。否則的話,在2.x的機器上有問題,但3.x上面是好著的。
EditText橫屏時,彈出軟件盤時不進行全屏
在使用EditText進行文本輸入時,若不進行特殊的設置,使用Android自帶的軟鍵盤,該軟鍵盤會占用整個界面,那么,如何讓鍵盤只占用屏幕的一部分呢?
<EditText android:id="@+id/text1" android:layout_width="150dip" android:layout_height="wrap_content" android:imeOptions="flagNoExtractUi"/>
使用android:imeOptinos可對Android自帶的軟鍵盤進行一些界面上的設置:
android:imeOptions="flagNoExtractUi" //使軟鍵盤不全屏顯示,只占用一部分屏幕 同時,這個屬性還能控件軟鍵盤右下角按鍵的顯示內容,默認情況下為回車鍵 android:imeOptions="actionNone" //輸入框右側不帶任何提示 android:imeOptions="actionGo" //右下角按鍵內容為'開始' android:imeOptions="actionSearch" //右下角按鍵為放大鏡圖片,搜索 android:imeOptions="actionSend" //右下角按鍵內容為'發送' android:imeOptions="actionNext" //右下角按鍵內容為'下一步' android:imeOptions="actionDone" //右下角按鍵內容為'完成'
同時,可能EditText添加相應的監聽器,捕捉用戶點擊了軟鍵盤右下角按鈕的監聽事件,以便進行處理。
editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { Toast.makeText(MainActivity.this, "text2", Toast.LENGTH_SHORT).show(); return false; } });
在TextView控件中單擊鏈接彈出Activity
http://blog.csdn.net/nokiaguy/article/details/6835916
TextView中做文字按鈕實現點擊事件
http://www.eoeandroid.com/thread-168290-1-1.html
Android使用TextView實現無下劃線超鏈接
http://orgcent.com/android-textview-no-underline-hyperlink/
文本框實現搜索和清空效果
http://407827531.iteye.com/blog/1114592
為TextView添加陰影
values/styles
<style name="AudioFileInfoOverlayText"> <item name="android:paddingLeft">4px</item> <item name="android:paddingBottom">4px</item> <item name="android:textColor">#ffffffff</item> <item name="android:textSize">12sp</item> <item name="android:shadowColor">#ff00ff00</item> <item name="android:shadowDx">5</item> <item name="android:shadowDy">3</item> <item name="android:shadowRadius">6</item> </style> <TextView android:id="@+id/info" android:layout_width="fill_parent" android:layout_height="wrap_content" style="@style/AudioFileInfoOverlayText" android:text="aaaa" android:gravity="center" />
如何將一行文字中的某些文字點擊后跳轉到其他界面?
比如下面的這句"您還未登陸,請登錄或注冊",當點擊的“登錄”和“注冊”的時候分別跳轉到相關界面。
public void extractMention2Link(TextView v) { String text1 = "登陸"; SpannableString spannableString1 = new SpannableString(text1); spannableString1.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { Intent intent = new Intent(context, SiginActivity.class); startActivity(intent); } }, 0, text1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); String text2 = "注冊"; SpannableString spannableString2 = new SpannableString(text2); spannableString2.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { Intent intent = new Intent(context, RegisterActivity.class); context.startActivity(intent); } }, 0, text1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); v.append("您還未登陸,請"); v.append(spannableString1); v.append("或者"); v.append(spannableString2); v.setMovementMethod(LinkMovementMethod.getInstance()); }
輕松實現在一個TextView內定義可點擊的鏈接:Android-TextView-LinkBuilder
http://www.open-open.com/lib/view/open1435647449778.html
android 設置文字不同樣式
//第一種方法 SpannableString ss = new SpannableString("今天天氣好嗎?挺好的"); ss.setSpan(new ForegroundColorSpan(Color.RED), 0, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(new ForegroundColorSpan(Color.GREEN), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(ss); //第二種方法 textView.setText(Html.fromHtml("<font size=\"3\" color=\"red\">今天天氣好嗎?</font><font size=\"3\" color=\"green\">挺好的</font>"));
如何將TextView中的中文設置成粗體?
在xml文件中使用android:textStyle="bold" 可以將英文設置成粗體,但是不能將中文設置成粗體,將中文設置成粗體的方法是:
TextView tv = (TextView)findViewById(R.id.TextView01);
TextPaint tp = tv.getPaint();
tp.setFakeBoldText(true);
其他還有:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 24f);//設置成24sp?
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//可能中文加粗無效
textView.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));//可能中文無效
textView.setText(Html.fromHtml("<u>"+texts[i]+"</u>"));//下劃線
textView.setTypeface(Typeface.MONOSPACE,Typeface.ITALIC);//斜體,中文有效
textView.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG );//中間加橫線
textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG );//底部加橫線
android:ellipsize = "end" ? 省略號在結尾
android:ellipsize = "start" 省略號在開頭
android:ellipsize = "middle"???? 省略號在中間
android:ellipsize = "marquee"? 跑馬燈
android:singleline = "true"
當然也可以用代碼語句:
tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));
tv.setSingleLine(true);
ellipsize和lines
<TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#FF00FF00" android:textSize="20px" android:lines="4" android:ellipsize="end" android:text="Automatic Target Mode: using existing emulator running compatible AVD.Application already deployed. No need to reinstall.Application already deployed. No need to reinstall.Application already deployed. No need to reinstall" />
不要將ellipsize和lines一起使用,否則會讓人疑惑。像上面的代碼會顯示幾行文字呢?
android:lines感覺是用于顯示文字的行數,事實上是不確切的。假如文字不滿足夠的行數呢?android:lines更適合用于設置TextView的高度,像上面的代碼指定了TextView的高度可以顯示4行文字,如果文字不滿4行,則TextView仍舊顯示4行的高度!
android:ellipsize用于當文字過長時縮略顯示,默認會縮略顯示2行!如果和android:singleLine="true"一起使用則顯示一行;但不要以為和android:lines="4"或和android:maxLines="4"一起使用會顯示4行,當試驗過了才知道仍然顯示2行!
動態顯示隱藏密碼輸入框的內容
et.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); // display password text, for example "123456"
et.setTransformationMethod(PasswordTransformationMethod.getInstance());// hide password, display "."?
如何對EditText輸入字數做限制?
private EditText mEditText ; mEditText = (EditText) findViewById(R.id.mEditText ); /** 限制字數 */ mEditText .addTextChangedListener(new TextWatcher() { private CharSequence temp; private int selectionStart ; private int selectionEnd ; @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { temp = s; } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { selectionStart = mEditText .getSelectionStart(); selectionEnd = mEditText .getSelectionEnd(); Log.d(TAG,""+selectionStart); if (temp.length() > 8) { Toast.makeText(MAUpdateAty.this, "字數不能超過8個", Toast.LENGTH_SHORT).show(); s.delete(selectionStart-1, selectionEnd); int tempSelection = selectionStart; mEditText .setText(s); mEditText .setSelection(tempSelection); } Log.d(TAG," "+selectionEnd); } });
或者試試這個:
private TextWatcher mTextWatcher = new TextWatcher(){ Toast mToast = null; public void beforeTextChanged(CharSequence s, int start, int count,int after) { } public void onTextChanged(CharSequence s, int start, int before,int count) { } public void afterTextChanged(Editable s) { int nSelStart = 0; int nSelEnd = 0; boolean nOverMaxLength = false; nSelStart = mEditText.getSelectionStart(); nSelEnd = mEditText.getSelectionEnd(); nOverMaxLength = (s.length() > Constants.MAX_TEXT_INPUT_LENGTH) ? true : false; if(nOverMaxLength){ if(null == mToast){ mToast = Toast.makeText(mContext, R.string.IDS_MSG_TEXT_OVER_MAXLENGTH, Toast.LENGTH_SHORT); } mToast.show(); s.delete(nSelStart - 1, nSelEnd); mEditText.setTextKeepState(s);//請讀者注意這一行,保持光標原先的位置,而 mEditText.setText(s)會讓光標跑到最前面,就算是再加mEditText.setSelection(nSelStart) 也不起作用 } } };
或者試試這個:
用代碼控制,可以用InputFilter限定20個字符:
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});
或者這個:
android:maxLength來設置輸入的最大長度
控制輸入小數的位數
// 設置小數位數控制 InputFilter lengthfilter = new InputFilter() { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { // 刪除等特殊字符,直接返回 if ("".equals(source.toString())) { return null; } String dValue = dest.toString(); String[] splitArray = dValue.split("\\."); if (splitArray.length > 1) { String dotValue = splitArray[1]; int diff = dotValue.length() + 1 - digLength; if (diff > 0) { return source.subSequence(start, end - diff); } } return null; } }; inputEdit.setFilters(new InputFilter[] { lengthfilter });
一 . 設置焦點
如果在單擊某個 EditText 的時候想讓其他的 EditText 獲得輸入的焦點,那么可以使用下面的語句,
getCurrentFocus().setFocusable(false); getCurrentFocus().setFocusableInTouchMode(false);
而要獲得焦點的 EditText :
mSearchEdit.setFocusable(true); mSearchEdit.setFocusableInTouchMode(true); mSearchEdit.requestFocus();
二 . 設置輸入格式過濾器
為 EditText 設置輸入的過濾器。InputFilter, 首先要注意的是對一個 EditText 的對象設置 setFilters(InputFilter[] filters) ,其參數是一個 inputFilter 數組,即對一個 EditText 你可以同時設置多個輸入過濾器。而我們平時用的時候一般設置一個過濾器就可以了,所以可以作如下使用(以輸入數字為例):
InputFilter[] mDigitsFilters = new InputFilter[1];
mDigitsFilters[0] = new DigitsKeyListener(true, true);
ps: DigitsKeyListener 第一個參數是 Sign, 如果設置為 true ,表示允許在數字最左端有負號,否則只能輸入正數;第二個參數是 decimal, 如果設置為 true, 表示允許在數字中有一個小數點存在。
最后 setFilters(mDigitsFilters); 就 OK 了,
InputFilter 是一個接口,其實現的子類有:
DateKeyListener, DateTimeKeyListener, DialerKeyListener, DigitsKeyListener, InputFilter.AllCaps, InputFilter.LengthFilter, LoginFilter, LoginFilter.PasswordFilterGMail, LoginFilter.UsernameFilterGMail, LoginFilter.UsernameFilterGeneric, NumberKeyListener, TimeKeyListener
DateKeyListener??????? For entering dates in a text field.
DateTimeKeyListener??? For entering dates and times in the same text field.
DialerKeyListener?????? For dialing-only text entry?
DigitsKeyListener?????????????? For digits-only text entry?
InputFilter.AllCaps????????????? This filter will capitalize all the lower case letters that are added through edits.
InputFilter.LengthFilter???????? This filter will constrain edits not to make the length of the text greater than the specified length.
LoginFilter????????????????? Abstract class for filtering login-related text (user names and passwords)?
LoginFilter.PasswordFilterGMail? This filter is compatible with GMail passwords which restricts characters to the Latin-1 (ISO8859-1) char set.
LoginFilter.UsernameFilterGMail????????? This filter rejects characters in the user name that are not compatible with GMail account creation.
LoginFilter.UsernameFilterGeneric??????? This filter rejects characters in the user name that are not compatible with Google login.
NumberKeyListener??????????? For numeric text entry?
TimeKeyListener???????? For entering times in a text field.
根據解釋應該不難理解,根據你自己的需要選擇吧。
實例:
EditText與InputFilter實現文本對比
????? 此功能類似于臨摹。已知被臨摹的字符串,將字符串與EditText中輸入進行
對比,輸入錯誤,則用“×”替換所輸入的字符。
import android.app.Activity; import android.os.Bundle; import android.text.InputFilter; import android.text.Spanned; import android.util.Log; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MyFilterTest extends Activity { /** Called when the activity is first created. */ TextView myText; EditText myEdit; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final String str = "Hello,Android!"; myText=(TextView)findViewById(R.id.myText); myText.setText(str); myEdit=(EditText)findViewById(R.id.myEdit); myEdit.setFilters(new InputFilter[]{ new MyInputFilter(str) }); } public class MyInputFilter implements InputFilter{ String str=null; public MyInputFilter(String str){ this.str=str; } @Override public CharSequence filter(CharSequence src, int start, int end, Spanned dest, int dstart, int dend) { // TODO Auto-generated method stub String ch=null; String TAG="Filter"; Log.w(TAG,"src:"+src+";start:"+start+";end:"+end); Log.w(TAG,"dest:"+dest+";dstart:"+dstart+";dend:"+dend); if(dest.length()<str.length()){ ch=str.substring(dstart+start, dstart+end); }else{ return dest.subSequence(dstart, dend); } if(ch.equals(src)){ Toast.makeText(MyFilterTest.this, "match", Toast.LENGTH_SHORT).show(); return dest.subSequence(dstart, dend)+src.toString(); }else{ Toast.makeText(MyFilterTest.this, "mismatch", Toast.LENGTH_SHORT).show(); return dest.subSequence(dstart, dend)+"×"; } } } }
參見其他:
http://www.blogjava.net/improviser/archive/2010/11/08/337501.html
http://wang-peng1.iteye.com/blog/1022523
如何設置EditText隱藏鍵盤 ?
(EditText)mMarket.setInputType(0);
如何設置EditText不被輸入法遮蓋 ?
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
如何解決軟鍵盤彈出引起的各種不適
如何隱藏Activity剛進來焦點在EditText時顯示輸入鍵盤?
一個Activity剛進來時焦點在EditText時,會彈出輸入的鍵盤,這不是我想要的,然后就想辦法隱藏掉輸入鍵盤。嘗試了EditText的clearFocus不行,也試過其它控件ruquestFocus也不行,用隱藏鍵盤的方法 http://mingkg21.iteye.com/blog/548642
不行。試試下面這種:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
這個方法的意思是,只有點擊EditText時才會彈出輸入鍵盤。
教程:如何控制輸入法軟鍵盤的出現方式
TextView實現多行本文滾動
Android中我們為了實現文本的滾動可以在ScrollView中嵌入一個TextView,其實TextView自己也可以實現多行滾動的,畢竟ScrollView必須只能有一個直接的子類布局。只要在layout中簡單設置幾個屬性就可以輕松實現
? <TextView?
??? android:id="@+id/tvCWJ"?
??? android:layout_width="fill_parent"?
??? android:layout_height="wrap_content"?
??? android:scrollbars="vertical"?? <!--垂直滾動條 -->
??? android:singleLine="false"?????? <!--實現多行 -->
??? android:maxLines="15"??????????? <!--最多不超過15行 -->
??? android:textColor="#FF0000"
??? />
?? 當然我們為了讓TextView動起來,還需要用到TextView的setMovementMethod方法設置一個滾動實例,代碼如下
TextView tv = (TextView)findViewById(R.id.tvCWJ);??
tv.setMovementMethod(ScrollingMovementMethod.getInstance());
android實現TextView垂直或水平滾動
設置EditText顯示或隱藏密碼
if (isChecked) { System.out.println("checked"); // 顯示密碼 password_edit.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } else { System.out.println("not checked"); // 隱藏密碼 password_edit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); }
EditView小寫轉大寫
final EditText input = new EditText(this); InputFilter[] FilterArray = new InputFilter[1]; FilterArray[0] = new InputFilter.AllCaps(); input.setFilters(FilterArray);
阻止EditText一開始就獲得焦點
程序在加載視圖時總是會把輸入的焦點自動移動到第一個輸入框(這樣導致在某些機器上程序一啟動就彈出輸入法框,很是不爽),如何讓他不獲得焦點呢?
EditText.setSelected(false);
上述命令是不行的。
clearFocus() 才是可以的。
如果你是用AutoCompleteTextView
<!-- Dummy item to prevent AutoCompleteTextView from receiving focus --> <!--最簡單的方法是在TextView的父容器(通常是LinearLayout)中設置android:focusable="true" android:focusableInTouchMode="true",這樣就把焦點從EditText上移走了。--> <LinearLayout android:focusable="true" android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"> <!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component to prevent the dummy from receiving focus again --> <AutoCompleteTextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:nextFocusUp="@+id/text" android:nextFocusLeft="@+id/text"/> </LinearLayout>
徹底隱藏軟鍵盤
EditText et=(EditText)findViewById(R.id.edit); et.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);
tv.setCompoundDrawables()不起作用?
Drawable leftDrawable; leftDrawable= getResources().getDrawable(R.drawable.left_drawable); // user setCompoundDrawables() method , you must call Drawable.setBounds() method !Or the Image can't show . leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight()); mTextView.setCompoundDrawables(leftDrawable, null, null, null);
其實就是android:drawableLeft="@drawable/icon"啦!
Enter鍵圖標的設置
軟鍵盤的Enter鍵默認顯示的是“完成”文本,我們知道按Enter建表示前置工作已經準備完畢了,要去什么什么啦。比如,在一個搜索中,我們輸入要搜索的文本,然后按Enter表示要去搜索了,但是默認的Enter鍵顯示的是“完成”文本,看著不太合適,不符合搜索的語義,如果能顯示“搜索”兩個字或者顯示一個表示搜索的圖標多好。事實證明我們的想法是合理的,Android也為我們提供的這樣的功能。通過設置android:imeOptions來改變默認的“完成”文本。這里舉幾個常用的常量值:

<EditText android:id="@+id/edit_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:imeOptions="actionSearch"/>
EditText的取值、全選、部分選擇、獲取選中文本
?????? 下面通過一個例子來演示EditText的取值、全選、部分選擇和獲取選中文本.main.xml如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:id="@+id/edit_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:imeOptions="actionSearch"/> <Button android:id="@+id/btn_get_value" android:text="取值" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_all" android:text="全選" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_select" android:text="從第2個字符開始選擇" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_get_select" android:text="獲取選中文本" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
代碼:
package com.flysnow; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.Selection; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import android.widget.TextView.OnEditorActionListener; /** * EditText演示 * @author 飛雪無情 * @since 2010-11-29 */ public class HelloEditText extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final EditText editText=(EditText)findViewById(R.id.edit_text); //監聽回車鍵 editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show(); return false; } }); //獲取EditText文本 Button getValue=(Button)findViewById(R.id.btn_get_value); getValue.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(HelloEditText.this, editText.getText().toString(), Toast.LENGTH_SHORT).show(); } }); //讓EditText全選 Button all=(Button)findViewById(R.id.btn_all); all.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { editText.selectAll(); } }); //從第2個字符開始選擇EditText文本 Button select=(Button)findViewById(R.id.btn_select); select.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Editable editable=editText.getText(); Selection.setSelection(editable, 1,editable.length()); } }); //獲取選中的文本 Button getSelect=(Button)findViewById(R.id.btn_get_select); getSelect.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int start=editText.getSelectionStart(); int end=editText.getSelectionEnd(); CharSequence selectText=editText.getText().subSequence(start, end); Toast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT).show(); } }); } /** * 交換兩個索引 * @param start 開始索引 * @param end 結束索引 */ protected void switchIndex(int start, int end) { int temp=start; start=end; end=temp; } }

自定義View控件解決android文字排版和換行的問題(轉,尚未測試)
http://www.eoeandroid.com/thread-64055-1-1.html
import java.util.Vector; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.FontMetrics; import android.util.AttributeSet; import android.view.View; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.TextView; public class MyView extends TextView { private final String namespace="http://www.nearmobile.net"; private int resourceId=0; /* 聲明Paint對象 */ private Paint mPaint = null; /* 聲明TextUtil對象 */ private TextUtil mTextUtil = null; public static int m_iTextHeight; private WindowManager wm=null; private String string=""; public MyView(Context context, AttributeSet set) { super(context,set); resourceId=set.getAttributeResourceValue(namespace, "text", 0); if(resourceId==0) string=set.getAttributeValue(null,"text"); else string=this.getResources().getString(resourceId); wm=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE); /* 構建對象 */ m_iTextHeight=2000; mPaint = new Paint(); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(40); mPaint.setTextSize(20); int m_iTextWidth=wm.getDefaultDisplay().getWidth(); FontMetrics fm = mPaint.getFontMetrics(); int m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + 4; int line=0; int istart=0; int w=0; for (int i = 0; i < string.length(); i++) { char ch = string.charAt(i); float[] widths = new float[1]; String srt = String.valueOf(ch); mPaint.getTextWidths(srt, widths); if (ch == '\n') { line++; istart = i + 1; w = 0; } else { w += (int) (Math.ceil(widths[0])); if (w > m_iTextWidth) { line++; istart = i; i--; w = 0; } else { if (i == (string.length() - 1)) { line++; } } } } m_iTextHeight=(line+2)*m_iFontHeight+2; //用反射機制得到 m_iTextHeight 值 /* 實例化TextUtil mTextUtil = new TextUtil(string,5,25,wm.getDefaultDisplay().getWidth(),this.getHeight(),0x0,0xffffff,255,15); 初始化TextUtil mTextUtil.InitText(string,5,25,wm.getDefaultDisplay().getWidth(),wm.getDefaultDisplay().getHeight(),0x0,0xffffff,255,15);*/ } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); /* 設置背景顏色 */ canvas.drawColor(Color.BLACK); mPaint.setAntiAlias(true); char ch; int w = 0; int istart = 0; int m_iFontHeight; int m_iRealLine=0; int x=2; int y=60; Vector m_String=new Vector(); int m_iTextWidth=wm.getDefaultDisplay().getWidth(); FontMetrics fm = mPaint.getFontMetrics(); m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + 4; //m_ipageLineNum = m_iTextHeight / m_iFontHeight; for (int i = 0; i < string.length(); i++) { ch = string.charAt(i); float[] widths = new float[1]; String srt = String.valueOf(ch); mPaint.getTextWidths(srt, widths); if (ch == '\n') { m_iRealLine++; m_String.addElement(string.substring(istart, i)); istart = i + 1; w = 0; } else { w += (int) (Math.ceil(widths[0])); if (w > m_iTextWidth) { m_iRealLine++; m_String.addElement(string.substring(istart, i)); istart = i; i--; w = 0; } else { if (i == (string.length() - 1)) { m_iRealLine++; m_String.addElement(string.substring(istart, string.length())); } } } } m_iTextHeight=m_iRealLine*m_iFontHeight+2; System.out.println("m_iTextHeight----->"+m_iTextHeight); canvas.setViewport(m_iTextWidth, m_iTextWidth); for (int i = 0, j = 0; i < m_iRealLine; i++, j++) { canvas.drawText((String) (m_String.elementAt(i)), x, y+m_iFontHeight * j, mPaint); } } protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int measuredHeight = measureHeight(heightMeasureSpec); int measuredWidth = measureWidth(widthMeasureSpec); this.setMeasuredDimension(measuredWidth, measuredHeight); this.setLayoutParams(new LinearLayout.LayoutParams(measuredWidth,measuredHeight)); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } private int measureHeight(int measureSpec) { int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); // Default size if no limits are specified. int result = m_iTextHeight; if (specMode == MeasureSpec.AT_MOST) { // Calculate the ideal size of your // control within this maximum size. // If your control fills the available // space return the outer bound. result = specSize; } else if (specMode == MeasureSpec.EXACTLY) { // If your control can fit within these bounds return that value. result = specSize; } return result; } private int measureWidth(int measureSpec) { int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); // Default size if no limits are specified. int result = 500; if (specMode == MeasureSpec.AT_MOST) { // Calculate the ideal size of your control // within this maximum size. // If your control fills the available space // return the outer bound. result = specSize; } else if (specMode == MeasureSpec.EXACTLY) { // If your control can fit within these bounds return that value. result = specSize; } return result; } }
TextView 垂直自動滾動
http://www.cnblogs.com/vaiyanzi/archive/2011/12/06/2277791.html
在TextView中自定義鏈接
http://handroid.diandian.com/post/2011-09-11/4961075
實現TextView中文字鏈接的方式
http://aichixihongshi.iteye.com/blog/1197726
TextView 文本自動對齊
http://blog.csdn.net/hudan2714/article/details/7816692
帶清除功能的輸入框控件ClearEditText,仿IOS的輸入框
http://blog.csdn.net/xiaanming/article/details/11066685
仿微信/支付寶的密碼輸入框效果:GridPasswordView
http://www.open-open.com/lib/view/open1427959506459.html
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
