EditText設置/隱藏光標位置、選中文本和獲取/清除焦點

有時候需要讓光標顯示在EditText的指定位置或者選中某些文本。同樣,爲了方便用戶輸入以提升用戶體驗,可能需要使EditText獲得或失去焦點。
1. 設置光標到指定位置

<ol class="linenums" style="padding: 0px 0px 0px 10px; margin: 0px;"><li value="1" class="L0" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> et </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> findViewById</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">R</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">id</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">etTest</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span></li><li class="L1" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">et</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">setSelection</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="lit" style="padding: 0px; margin: 0px; color: rgb(0, 102, 102);">2</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span></li></ol>


PS:當內容過多時,可通過設置光標位置來讓該位置的內容顯示在屏幕上。
2. 隱藏光標

<ol class="linenums" style="padding: 0px 0px 0px 10px; margin: 0px;"><li value="1" class="L0" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> et </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> findViewById</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">R</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">id</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">etTest</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span></li><li class="L1" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="com" style="padding: 0px; margin: 0px; color: rgb(136, 0, 0);">//設置光標不顯示,但不能設置光標顏色</span></li><li class="L2" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">et</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">setCursorVisible</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="kwd" style="padding: 0px; margin: 0px; color: rgb(0, 0, 136);">false</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span></li></ol>

3. 獲得焦點時全選文本

<ol class="linenums" style="padding: 0px 0px 0px 10px; margin: 0px;"><li value="1" class="L0" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> et </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> findViewById</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">R</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">id</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">etTest</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span></li><li class="L1" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">et</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">setSelectAllOnFocus</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="kwd" style="padding: 0px; margin: 0px; color: rgb(0, 0, 136);">true</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span></li></ol>


PS:此方法可用來在用戶點擊EditText時,選中默認內容。
4. 獲取和失去焦點

<ol class="linenums" style="padding: 0px 0px 0px 10px; margin: 0px;"><li value="1" class="L0" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> et </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> findViewById</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">R</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">id</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">etTest</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span></li><li class="L1" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">et</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">requestFocus</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">();</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="com" style="padding: 0px; margin: 0px; color: rgb(136, 0, 0);">//請求獲取焦點</span></li><li class="L2" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">et</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">clearFocus</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">();</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="com" style="padding: 0px; margin: 0px; color: rgb(136, 0, 0);">//清除焦點</span></li></ol>

5. 綜合運用代碼

<ol class="linenums" style="padding: 0px 0px 0px 10px; margin: 0px;"><li value="1" class="L0" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> et </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">EditText</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> findViewById</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">R</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">id</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">etTest</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span></li><li class="L1" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="kwd" style="padding: 0px; margin: 0px; color: rgb(0, 0, 136);">int</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> index </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> et</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">getSelectionStart</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">();</span><span class="com" style="padding: 0px; margin: 0px; color: rgb(136, 0, 0);">//獲取光標所在位置		 </span></li><li class="L2" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">String</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> text</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">=</span><span class="str" style="padding: 0px; margin: 0px; color: rgb(0, 136, 0);">"#請在這裏輸入話題#"</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">;</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span></li><li class="L3" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102);">Editable</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> edit </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> et</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">getEditableText</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">();</span><span class="com" style="padding: 0px; margin: 0px; color: rgb(136, 0, 0);">//獲取EditText的文字		</span></li><li class="L4" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="kwd" style="padding: 0px; margin: 0px; color: rgb(0, 0, 136);">if</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">index </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);"><</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="lit" style="padding: 0px; margin: 0px; color: rgb(0, 102, 102);">0</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">||</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> index </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">>=</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> edit</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">length</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">()</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">){</span></li><li class="L5" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">    edit</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">append</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">text</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">	</span></li><li class="L6" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">}</span><span class="kwd" style="padding: 0px; margin: 0px; color: rgb(0, 0, 136);">else</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">{</span></li><li class="L7" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">    edit</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">insert</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">index</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">text</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span><span class="com" style="padding: 0px; margin: 0px; color: rgb(136, 0, 0);">//光標所在位置插入文字			</span></li><li class="L8" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">}</span></li><li class="L9" style="padding: 0px; margin: 0px 0px 0px 5px; list-style: decimal inside;"><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">et</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">setSelection</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">index </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">+</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="lit" style="padding: 0px; margin: 0px; color: rgb(0, 102, 102);">1</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> index </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">+</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> text</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);">length</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">()</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">-</span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);"> </span><span class="lit" style="padding: 0px; margin: 0px; color: rgb(0, 102, 102);">1</span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0);">);</span></li></ol>

PS:在光標處插入文本,並選中##裏面的文本

整理改編自: http://orgcent.com/android-edittext-cursor-position-focus/

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