更改Android中动态添加表格行的背景颜色

时间:2013-11-22 09:29:38

标签: android colors background row android-tablelayout

我正在尝试创建一个表来显示我的数据库内容,我希望我的应用程序的用户可以选择表的特定行。并且与其他行相比,所选行具有不同的背景。 我想动态添加所有东西,所以我有以下代码用于我的TableView(这段代码是测试,还没有连接到数据库)。

RelativeLayout container = (RelativeLayout) findViewById(R.id.container);
TableLayout MainLayout = new TableLayout(this);
MainLayout.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.FILL_PARENT));
MainLayout.setStretchAllColumns(true);   
//Create the first row and add two text views
TableRow row1 = new TableRow(this);
TextView text1 = new TextView(this);
text1.setText("Test1\n");
text1.setGravity(android.view.Gravity.CENTER);
TextView text2 = new TextView(this);
text2.setText("Test2");
text2.setGravity(android.view.Gravity.CENTER);
row1.addView(text1);
row1.addView(text2);
row1.setBackgroundResource(R.drawable.row_selector);
MainLayout.addView(row1);

我的 row_selector.xml 是:

<!-- language: xml -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">        
    <item android:state_pressed="true" android:drawable="@color/green" />
    <item android:state_selected="true" android:drawable="@color/red" />
    <item android:state_focused="true" android:drawable="@color/blue" />
    <item android:state_selected="true" android:state_focused="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
</selector> 

我在 colors.xml 中定义了值中的绿色/红色/蓝色。 但是当我运行我的应用程序并单击该行时,没有任何变化,背景颜色保持透明。我已将透明更改为红色,即使单击后颜色仍保持红色。所以我知道表行已正确连接到row_selector.xml,但它无法正常工作。

为什么颜色不会改变?

更新: 我使用$row1.setClickable(true)$并且它正常工作。 (当我点击该行时它变成蓝色)。那么在我选择另一行之前,如何为所选行设置特定颜色。我的意思是我只希望最后选择的行有不同的颜色。

1 个答案:

答案 0 :(得分:0)

我自己添加以下代码:

row1.setBackgroundResource(R.color.blue);
row2.setBackgroundResource(R.color.blue);
row1.setId(10001);
row2.setId(10002);

            View.OnTouchListener rowClick = new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) 
                {
                    if(lastRowId>0){
                        ((TableRow)findViewById(lastRowId)).setBackgroundResource(R.color.blue);
                    }
                    lastRowId = v.getId();
                    v.setBackgroundResource(R.color.red);
                    return true;
                }
            };
            row1.setOnTouchListener(rowClick);
            row2.setOnTouchListener(rowClick);