EditText 在設置添加文本內(nèi)容時候,光標一般都在文本開頭,如何一開始自動在文本末尾呢?
創(chuàng)新互聯(lián)公司作為成都網(wǎng)站建設公司,專注網(wǎng)站建設、網(wǎng)站設計,有關成都企業(yè)網(wǎng)站定制方案、改版、費用等問題,行業(yè)涉及圍欄護欄等多個領域,已為上千家企業(yè)服務,得到了客戶的尊重與認可。
監(jiān)聽光標移動事件,重寫 onSelectionChanged(int selStart, int selEnd)即可,自定義一個EditText, 一勞永逸.
[img]SQLiteDatabase db = dataBaseHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("select *from User",null);
1.光標的行數(shù):int getCount()
2.當前光標的位置:int getPosition()
返回的值從零開始, 當?shù)谝淮畏祷匦屑瘯r游標將位于位置 -1,即第一行之前。在返回最后一行之后,對 next() 的另一個調(diào)用將使光標離開最后一個條目,位于 count() 的位置。
3.從當前位置應用的偏移量:boolean move(int offset)
將光標從當前位置向前或向后移動一個相對量。 正偏移向前移動,負偏移向后移動。 如果最終位置在結(jié)果集的邊界之外,則結(jié)果位置將分別固定為 -1 或 count(),具體取決于該值是在集合的前端還是末尾。如果請求的目的地可達,此方法將返回 true,否則返回 false。
4.將光標移動到絕對位置:boolean moveToPosition(int position)
值的有效范圍是 -1 = 位置 = 計數(shù)。如果請求目的地可達,此方法將返回 true,否則返回 false。
5.將光標移動到第一行:boolean moveToFirst()
6.將光標移動到最后一行:boolean moveToLast()
7.將光標移動到下一行:boolean moveToNext()
8.將光標移動到上一行:boolean moveToPrevious()
9.返回光標是否指向第一行:boolean isFirst()
10.返回光標是否指向最后一行:boolean isLast()
11.返回光標是否指向第一行之前的位置:boolean isBeforeFirst()
12.返回光標是否指向最后一行之后的位置:boolean isAfterLast()
13.給定列名的從零開始的列索引,如果列名不存在,則返回 -1:int getColumnIndex(String columnName)
14.給定列名的從零開始的索引,如果該列不存在則拋出非法參數(shù)異常:int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException
15.給定的從零開始的列索引處的列名:String getColumnName(int columnIndex)
16.返回一個字符串數(shù)組,其中按列在結(jié)果中的順序保存結(jié)果集中所有列的名稱。:String[] getColumnNames()
17.返回總列數(shù):int getColumnCount()
18.各類型返回值
(1)以字節(jié)數(shù)組的形式返回請求列的值:byte[] getBlob(int columnIndex)
(2)以字符串形式返回請求列的值:String getString(int columnIndex)
(3)以整數(shù)形式返回請求列的值:int getInt(int columnIndex)
(4)以 long 形式返回請求列的值:long getLong(int columnIndex)
(5)以浮點數(shù)形式返回請求列的值:float getFloat(int columnIndex)
(6)以雙精度形式返回請求列的值:double getDouble(int columnIndex)
(7)返回給定列值的數(shù)據(jù)類型:int getType(int columnIndex)
(8)列值是否為空:boolean isNull(int columnIndex)
(9)以短形式返回請求列的值:short getShort(int columnIndex)
19.檢索請求的列文本并將其存儲在提供的緩沖區(qū)中:void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)
20.關閉游標:void close()
21.游標是否關閉:boolean isClosed()
22.注冊一個觀察者,當支持此游標的內(nèi)容發(fā)生變化時調(diào)用該觀察者:void registerContentObserver(ContentObserver observer)
23.銷毀注冊的觀察者:void unregisterContentObserver(ContentObserver observer)
24.注冊一個觀察者,當數(shù)據(jù)集的內(nèi)容發(fā)生變化時被調(diào)用:void registerDataSetObserver(DataSetObserver observer)
25.銷毀注冊的觀察者:void unregisterDataSetObserver(DataSetObserver observer)
26.注冊以查看內(nèi)容 URI 的更改。這可以是特定數(shù)據(jù)行的 URI,也可以是內(nèi)容類型的通用URI:void setNotificationUri(ContentResolver cr, Uri uri)
cr是上下文,uri是需要觀看的內(nèi)容
27.是否所有光標移動都應導致調(diào)用 onMove():boolean getWantsAllOnMoveCalls()
只有在此方法返回 true 時,才會跨進程調(diào)用 onMove()
28.返回一組額外的值:Bundle getExtras()
29.光標用戶與光標通信的帶外方式:Bundle respond(Bundle extras)
30.設置 Bundle 返回的getExtras():void setExtras(Bundle extras)
Android中有很多可編輯的彈出框,其中有些是讓我們來修改其中的字符,這時光標位置定位在哪里呢?
剛剛解了一個bug是關于這個光標的位置的,似乎Android原生中這種情況是把光標定位到字符串的最前面。需求是將光標定位到字符的最后面。
修改的地方是TextView這個控件,因為EditText也是繼承了TextView。在setText方法中有:
1 private void setText(CharSequence text, BufferType type,
2 boolean notifyBefore, int oldlen) {
3 ……
4 if (text instanceof Spannable) {
5 Spannable sp = (Spannable) text;
6
7 ……
8 if (mMovement != null) {
9 mMovement.initialize(this, (Spannable) text);
10 //文本是不是Editable的。
11 if(this instanceof Editable)
12 //設定光標位置
13 Selection.setSelection((Spannable)text, text.length());
14
15 ……
16 }
從紅色代碼中可以看出,google是要光標處在缺省文本的末端,但是,log發(fā)現(xiàn) (this instanceof Editable)非真,也就是說Selection.setSelection((Spannable)text, text.length());并不會被執(zhí)行。
1 Log.d("TextView", "(type == BufferType.EDITABLE)="+(type == BufferType.EDITABLE));
2 if(type == BufferType.EDITABLE){
3 Log.d("TextView","Format text.Set cursor to the end ");
4 Selection.setSelection((Spannable)text, text.length());
5 }
這個樣修改后即可。
在編寫應用的時候,如果我們要將光標定位到某個位置,可以采用下面的方法:
1 CharSequence text = editText.getText();
2 //Debug.asserts(text instanceof Spannable);
3 if (text instanceof Spannable) {
4 Spannable spanText = (Spannable)text;
5 Selection.setSelection(spanText, text.length());
6 }
其中紅色標記的代碼為你想要設置的位置,此處是設置到文本末尾。
如圖:
在 /res/drawable 文件夾下創(chuàng)建 edit_cursor_color.xml :
布局文件中設置 EditText 的 textCursorDrawable 屬性為 edit_cursor_color :
在安卓手機上編輯文檔,虛擬鍵盤狀態(tài)下輸入文字時如何移動光標?。亢芏嘤冒沧渴謾C的人很困惑。解決方法:1.用有自帶四向光標移動鍵,如觸寶輸入法,訊飛語音輸入法。
2.我用的是MOTO自帶的輸入法,長按會出現(xiàn)放大鏡,移動放大鏡就能移動光標。不過要注意切換到非手寫狀態(tài),因為手寫狀態(tài)是全屏,不一定好用。3.三星的話,點一下就會有圓形移桿的讓你移動。