2012-01-19 37 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) 

当视图的焦点状态发生变化时调用。