簡體   English   中英

clearFocus()和focusableInTouchMode =“ true”如何一起工作?

[英]How do clearFocus() and focusableInTouchMode=“true” work together?

我希望有人解釋以下兩種行為。

我從以下屏幕開始:

在此處輸入圖片說明

當我觸摸“您來自的城市”中的文本區域時,將顯示以下屏幕: 在此處輸入圖片說明

當我按下鍵盤的“完成”按鈕時,我將按預期返回到原始狀態。 換句話說,隱藏的框再次變得可見,並且光標消失了(EditText不再具有焦點)。 這是怎么回事,我只是有一個聽眾在等待按下“完成”按鈕。 發生這種情況時,我在EditText視圖上調用clearFocus() 然后,我有一個OnFocusChangeListener ,它使所有框都不可見/可見,這取決於EditText是否具有焦點。

但是,只有在使用以下屬性設置祖先布局(即父母或祖父母RelativeLayout)時,我才會得到這種預期的行為: android:focusableInTouchMode="true"

否則,我得到以下屏幕:

在此處輸入圖片說明

調用clearFocus() ,它會跳至clearFocus()中的下一個子級,即“當前城市”,並賦予EditText焦點(並隱藏鍵盤,但這是預期行為的一部分)。

如果我未設置android:focusableInTouchMode="true"則在屏幕1中單擊“當前城市”也會在屏幕3中產生結果。 換句話說,它保持在“當前城市”並且不會失去焦點。

問題有人可以解釋發生了什么嗎? 為什么android:focusableInTouchMode="true"會導致這種奇怪的行為?

我在clearFocus()的源代碼上方的注釋中找到了答案:

“當該視圖要放棄焦點時調用。如果焦點被清除,則調用onFocusChanged(boolean,int,android.graphics.Rect)。注意:當視圖清除焦點時,框架將嘗試將焦點從因此,如果此View是最先關注焦點的View,則在框架將焦點置於此視圖之后,將調用與清除焦點相關的所有回調。”

換句話說,當一個視圖放棄焦點時,框架從根部開始遍歷層次結構,以尋找可以為其提供焦點的第一個視圖。 當我省略android:focusableInTouchMode="true" ,框架將焦點賦予“當前城市”,因為這是它發現的第一個可聚焦的視圖。 當多個事物可以集中在層次結構的同一級別上時,框架將從最接近實際xml代碼底部的視圖開始。 這樣做的原因是,如果2個視圖在層次結構中處於同一級別,並且您將這些視圖放置在屏幕上的相同位置,則最接近代碼底部的視圖將出現在屏幕頂部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM