有時候需要讓光標顯示在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/