2012-01-19 86 views
0

在我的XML中,我有一個TableLayout,只有一個TableRow,即標題。我動態添加的其他所有行爲TableRow設置BackgroundColor(LTGray)& TextColor for TextViews在其中。我也處理每一行上的點擊事件。Android:關於TableRow選擇的查詢

private void createView(TableRow tr, TextView tv, String data, int rowId) { 
    tv.setText(data); 

    //tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    tv.setTextColor(Color.BLACK); 
    tv.setPadding(20, 0, 0, 0); 

    tr.setPadding(0, 1, 0, 1); 
    tr.setBackgroundColor(Color.LTGRAY); 
    tr.setId(rowId); 
    tr.setClickable(true); 
    tr.setOnClickListener(this); 
    tr.addView(tv); 
} 

註冊的選擇: 我想改變的TableRow的BACKGROUNDCOLOR可以說黃色。所以如果第一行被選中,bgColor應該是黃色的。然後如果第三行被選中,第一行的顏色應該變成LTGray。

如果點擊任何地方的行,那麼所選的行(如果有的話)也應該被取消選擇。爲此,我必須添加主佈局clickListener或者再次選擇行並將其取消選擇?

可以選擇器(狀態列表drawable)適用於這兩種方式,或者我可以通過編程方式處理它。在我的Java代碼中,我應該使用什麼類型的Drawable來設置狀態列表drawable?

我相信就像TableRow的其他組件一樣,onClick也會照顧onTouch。如果我錯了,請糾正我。因爲想要觸摸行也處理相同的功能。

達到目標的最佳方法是什麼?任何幫助,高度讚賞。

回答

0

謝謝朋友,

我管理它在代碼本身處理。添加到每行addd的點擊偵聽器,並相應地處理選定和未選擇的行的顏色。

0

不要在代碼中改變它!改用選擇器。

Taken from here:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Active state --> 
    <item android:state_selected="true" android:state_focused="false" android:state_pressed="false" android:drawable="@android:color/transparent" />  
<!-- Inactive state--> 
    <item android:state_selected="false" android:state_focused="false"   android:state_pressed="false" android:drawable="@android:color/transparent" /> 
    <!-- Pressed state--> 
    <item android:state_pressed="true" android:drawable="@android:color/yellow" /> 
    <!-- Selected state (using d-pad) --> 
    <item android:state_focused="true" android:state_selected="true"   android:state_pressed="false" android:drawable="@android:color/yellow" /> 
</selector> 

不那麼徹底,但更多有用的答案是here

改變選擇動態here

+0

@Gangus,但我如何動態地在我的java代碼中設置選擇器。我的意思是我必須設置一個叫做「R .....」的方法。我無法使用哪種方法來爲我的TableRow設置它。 – Tvd

+0

將該參考添加到答案中。 – Gangnus

+0

@Gangus,我用上面的xml代碼,並將setBackgroundDrawable()添加到我的TableRow中。結果:當我點擊它時,它只是閃爍黃色,然後恢復正常,然後onclick事件被捕獲,在該行的狀態是:ROW CLICKED CAUGHT - Selected:false Pressed:true Focused:false 爲什麼黃色顏色不保留? – Tvd

0

好吧,不是使用OnFocusChangeListener。它捕捉獲得並失去焦點。

onFocusChange(View v, boolean hasFocus) 

當視圖的焦點狀態發生變化時調用。