當前位置:首頁 » 安卓系統 » requestfocusandroid

requestfocusandroid

發布時間: 2022-12-23 19:00:30

⑴ android怎麼在代碼中設置文本框獲得焦點

android中,要使控制項獲得焦點,需要先setFocus,再requestFocus。

以Button為例:
btn.setFocusable(true);

btn.setFocusableInTouchMode(true);

btn.requestFocus();
btn.requestFocusFromTouch();

⑵ android 如何讓軟鍵盤自動彈出

可以通過下面的代碼來實現Android自動彈出軟鍵盤:

edittext.requestFocus(); //edittext是一個EditText控制項
Timer timer = new Timer(); //設置定時器
timer.schele(new TimerTask() {
@Override
public void run() { //彈出軟鍵盤的代碼
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.showSoftInput(edittext, InputMethodManager.RESULT_SHOWN);
 imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}, 300); //設置300毫秒的時長

說明:同樣是在寫Techo Lite時遇到的問題。希望程序可以自動彈出軟鍵盤,可是嘗試了各種辦法都沒有效果。問題的原因似乎是必須等待UI繪制完成後彈出軟鍵盤的代碼才會有效。於是就採用了上面的方法。需要注意的是,在此之前必須讓edittext獲取焦點,不然也是無效的。

⑶ android開發怎麼讓edittext無法獲取焦點

在android項目中,一進入一個頁面, EditText默認就會自動獲取焦點。使用如下的方法可以讓EditText無法獲取焦點。

解決之道:在EditText的父級控制項中設置下面的屬性

Android:focusable="true"
android:focusableInTouchMode="true"

在window7平台,android studio開發工具下,步驟如下。

1、打開android sutdio並創建一個項目,如下圖:

⑷ android開發,XML文件中,EditText中的 <requestFocus />標記是在說明什麼

就是說你得第一個<requestFocus />會獲得焦點,意思就是如果你給某個edittext設置了<requestFocus />標記,並且這個edittext前面沒有設置<requestFocus />標記的控制項,那麼這個edittext就會獲得焦點,也就是輸入的那個游標。

⑸ Android移動應用中的焦點分析

簡單一點理解,在移動應用中,焦點就是當前正在處理事件的位置。在手機應用中,最有可能用到焦點的就是EditText,如果同一個界面中有多個EditText,通常情況下同一時間只有一個能夠輸入內容,此時,這個EditText就獲取了焦點。

在Android中,對焦點的設置分為兩種情況,TouchMode和非TouchMode。現在的手機基本都是觸摸屏,我們用手指觸摸屏幕來操作Android應用時,處於TouchMode。除了TouchMode之外,還有非TouchMode,利用外接設備來操作應用。比如鍵盤。使用Genymotion模擬器的時候,一個界面上有多個控制項時,可以用電腦tab鍵來進行移動,被選中的控制項會高亮顯示,這時候就是非TouchMode,被選中的控制項獲得了焦點。

在手機應用中,用到焦點的時候並不多,但是TV應用中,需要用遙控器來操作選中控制項,這時候就需要對焦點進行處理了。關於焦點,常用方法如下:

在View類中, isFocusable() 和 isFocusableInTouchMode() 獲取到的結果都是false,也就是說,直接繼承自View的控制項是不能獲取焦點的。我們常用控制項中對這兩個方法進行了改寫,比如EditText,這兩個方法都是true,而Button則只有 isFocusable() 返回true。這也就是為什麼我們用tab鍵選取Button的時候能夠高亮顯示,而滑鼠點擊(模擬觸控)的時候不能高亮顯示的原因了。如果想在點擊的時候也能高亮顯示Button,需要手動設置 setFocusableInTouchMode(true) ,就可以了。

如果想對控制項的焦點狀態進行監聽,需要設置 setOnFocusChangeListener() ,只要控制項的焦點狀態發生變化(獲得或者失去焦點),都會調用 onFocusChange 方法

關於焦點的移動,默認的演算法會尋找指定方向上最近的可以獲取焦點的元素(非TouchMode)。另外在創建控制項的時候,也可以指定尋找焦點的方向,設置nextFocusDown、nextFocusLeft、nextFocusRight 和 nextFocusUp的值為指定元素就可以了。看以下例子:

這里指定了上面的button向上尋找焦點時,下一個元素是id為bottom的元素,也就是說,上面的Button在獲取了焦點之後,繼續按向上鍵,系統會將焦點移動到id為bottom的元素上,而不是繼續向上。

在開發手機應用的過程中,對焦點的處理並不多,它與事件是兩個不同的體系,通常情況下焦點和事件是相互獨立並不沖突。但是在Button的點擊事件中會有一點問題。如果我們隊一個button設置了 setFocusableInTouchMode(true) ,使他可以獲取焦點,那麼我們點擊這個button的時候,第一次點擊並不會執行 onClick() 方法,而是執行 onFocusChange() 。第二次點擊的時候才會執行 onClick() 方法。看起來好像 onFocusChange() 消耗了點擊事件,實際上並不是的。

這個問題我們看一下源碼就清楚了:

onClick() 方法是在onTouchEvent的ACTION_UP里調用的,看一下View的onTouchEvent方法:

可以看到,只有當focusTaken為false的時候才會執行onClick,focusTaken的值默認是false的,但是在 isFocusable() && isFocusableInTouchMode() && !isFocused() 為true的時候,會去 requestFocus 獲取焦點,並將值賦給focusTaken。

關鍵在於 isFocused() ,如果當前Button沒有獲取焦點, isFocused() 返回false, !isFocused() 值為ture,Button就會去獲取焦點,從而導致 focusTaken 為true, onClick 方法就不會執行了,只有Button已經獲取了焦點的時候才會執行onClick方法。

⑹ android 如何讓軟鍵盤自動彈出

可以通過下面的代碼來實現Android自動彈出軟鍵盤:

edittext.requestFocus(); //edittext是一個EditText控制項
Timer timer = new Timer(); //設置定時器
timer.schele(new TimerTask() {
@Override
public void run() { //彈出軟鍵盤的代碼
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(edittext, InputMethodManager.RESULT_SHOWN);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}, 300); //設置300毫秒的時長

說明:同樣是在寫Techo Lite時遇到的問題。希望程序可以自動彈出軟鍵盤,可是嘗試了各種辦法都沒有效果。問題的原因似乎是必須等待UI繪制完成後彈出軟鍵盤的代碼才會有效。於是就採用了上面的方法。需要注意的是,在此之前必須讓edittext獲取焦點,不然也是無效的。

⑺ Android焦點問題

Android焦點分發主要涉及的方法就是
findFocus:View都有,發現焦點
requestFocus:View都有,請求獲取焦點
requestChildFocus:只有ViewGroup有
focusSearch:View都有,焦點查詢
這幾個方法下面將分別介紹一下這幾個方法。
1、焦點的獲取,默認進入頁面

系統自動請求焦點也是從最頂層的容器控制項開始向內請求的,我們進入一個界面系統會自動請求焦點,尋找焦點,最後使用一個控制項獲得焦點。
2、焦點的切換

切換焦點的時候,也是要從最頂層的父容器尋找到焦點(findFocus),然後從獲得到焦點的控制項開始從內向外調用focusSearch尋找下一個焦點控制項。

總結:Android的焦點分發跟事件分發類似,有一個從內向外,從外向內的過程,焦點分發中,尋找當前的焦點控制項(findFocus)和焦點的請求(requestChildFocus)都是從外向內的,就是從頂層的父容向內層的子容器尋找和請求,但是搜尋下一個焦點(focusSearch)是從當前焦點控制項開始的,就是從內向外尋找,到這里我們知道了Android焦點分發的一個基本流程。

參考 Android TV 按鍵焦點事件分發流程詳解

⑻ Android 獲取焦點

你好,我舉例說明:比如有個輸入框,當你點擊輸入框時,這時它的游標在閃爍,可以輸入文字,那麼就可以說這個輸入框獲得焦點了。獲取焦點的控制項就是當前可以執行操作的控制項。
使用view.requestFocus()方法可以手動獲取焦點。
以上,希望對你有幫助。

⑼ Android View如何獲取焦點

Android新啟動Activity,dialog或者其他窗體中包含EditText, 新啟動的activity的焦點默認在EditText上,這時android系統會彈出軟鍵盤,擠壓activity本來的界面,影響美觀。
因此最好在新窗體創建時,在onCreate()方法中將焦點放在另一個view上。
view使用requestFocus()焦點,但是如果讓button或者textView之類控制項直接使用requestFocus()方法,則無法獲取焦點,焦點會依然在editText上。
只能在使用View的requestFocus()方法之前調用下面2個方法,view才可獲取焦點:

view.setFocusable(true);

view.setFocusableInTouchMode(true);

然後調用 view.requestFocus()即可獲取焦點。

熱點內容
喵喵試玩腳本 發布:2025-04-05 19:42:08 瀏覽:456
我的世界布吉島伺服器怎麼加材質包 發布:2025-04-05 19:32:27 瀏覽:594
ftp怎麼連接路由 發布:2025-04-05 19:20:52 瀏覽:232
手游腳本商城 發布:2025-04-05 19:08:23 瀏覽:799
摘星游戲腳本 發布:2025-04-05 18:49:51 瀏覽:590
c語言中k什麼意思 發布:2025-04-05 18:49:40 瀏覽:87
php在線編程 發布:2025-04-05 18:47:30 瀏覽:542
sqlserver運行 發布:2025-04-05 18:41:32 瀏覽:44
如何安卓遷移蘋果 發布:2025-04-05 18:35:03 瀏覽:577
c語言輸入處理 發布:2025-04-05 18:34:58 瀏覽:99