2011-02-11 55 views
3

我目前正在玩Android的Textview的選取框功能。但有一個問題 - 我有一個包含幾個TextView的佈局。其中之一顯示音樂文件的標題,我想要應用選取框功能。 另一方面,我不斷更新當前曲目時間(每秒)。Android TextView SetText()停止另一個TextView的選取框 - 解決方法?

問題是,每次顯示軌道時間的TextView都會更新(setText()),另一個TextView的選取框停止。我想這是因爲setTExt()將焦點移動到我應用文本的TextView。

有沒有解決方案呢?

我用字幕的TextView定製類從這個tutorial

有沒有一種可能(可能是自定義類以及)對於其他的TextView不「偷」重點是什麼?

謝謝!

問候

回答

1

你可以簡單地requestFocus()方法;在新的音樂TextView更新後,回到您想要選取的TextView。如果您無法完成此任務,請發佈一些我們可以提供幫助的代碼。

TextView.requestFocus()

+0

再次。感謝你及時的答覆。我想我沒有解釋自己是對的,對不起。因爲我更新了TextView EVERY SECOND,所以選取框甚至沒有開始,因爲這個更新週期太快了。這就是爲什麼我問自己是否可以在沒有獲得焦點的情況下更新TextView,以便focas將保留在使用選取框的TextView中。 – Georg 2011-02-11 23:55:19

+0

怎麼樣羅曼建議,並設置你想要選框setviewable(true); ? – Blundell 2011-02-12 18:35:58

+0

我把上面的代碼放在runnable中,它工作正常!非常感謝! – dd619 2013-10-29 06:25:48

4

選取框當一個TextView被的setEnabled(真)或接收焦點被啓用。使用setEnabled(true)來確保其他TextViews在焦點移動時不會停止其選取框。

3

但有一個問題 - 我有一個包含幾個TextView的佈局。我發現這裏的解決方案: http://androidbears.stellarpc.net/?p=185

您應該擴展的TextView類並覆蓋多種方法

@Override 
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 
    if(focused) 
     super.onFocusChanged(focused, direction, previouslyFocusedRect); 
} 



@Override 
public void onWindowFocusChanged(boolean focused) { 
    if(focused) 
     super.onWindowFocusChanged(focused); 
} 

@Override 
public boolean isFocused() { 
     return true; 
} 
3

在我的情況setEnabled(true)沒有hepled。既不需要關注,也不需要任何類型的關注,因爲它沒有成爲焦點問題。我相信選取框也會在TextView經過onLayout()時重新啓動。

在我的情況下,TextView是在一個LinearLayout中,它有layout_height="wrap_content"。顯示軌跡時間的TextView低於帶有字幕的TextView。現在,當我每秒鐘更新較低的TextView時,我相信OS會從頭開始計算它的高度,並根據TextView的高度(當然每次都是相同的)計算整個LinearLayout的高度。這就是爲什麼整個LinearLayout(和它的孩子)得到重新啓動選取框的onLayout()

長話短說,我將容器LinearLayout的高度設置爲固定值,並且選取框開始工作。

0

您可以簡單地使用LinearLayou包裹選取框TextView t