Android TableRow背景

时间:2011-03-16 13:08:57

标签: android layout onclick

我有一个TableRow的问题,我动态添加。

private void addRow(String body) {
        LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        TableRow row = (TableRow) inflater.inflate(R.layout.customrow,null);
        TextView name = (TextView) row.findViewById(R.id.customName);
        name.setText(body);                        
        row.setOnLongClickListener(this);       
    }

我希望此行可以在onClickonLongClick上更改颜色。

customrow.xml文件中的代码是:

<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/tableRow1" 
       android:layout_gravity="center" 
       android:layout_height="wrap_content" 
       android:layout_width="fill_parent" 
       android:gravity="center_vertical" 
       android:onClick="showOnClick">    
    <TextView android:id="@+id/customName"
        android:textSize="25px"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:layout_weight="5">
    </TextView>
</TableRow>

我尝试在行中使用android:background="@drawable/clickedbackground",但它无效。

clickedbackground.xml文件中的代码是:

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

任何人都知道我做错了什么(颜色/自定义在另一个有效的xml中定义)?

谢谢

4 个答案:

答案 0 :(得分:2)

您正在为tablerow命名行创建对象。你还有clickedbackground.xml个文件。只需在addRow方法中使用以下代码。

row.setBackgroundResource(R.drawable.clickedbackground);

我认为它解决了你的问题。

答案 1 :(得分:0)

在您的addRow()方法中,您要对该行进行充气,但是您没有将其添加到任何父级布局,而row是一个局部变量,我认为您在其他任何地方都没有这样做,这是复制/粘贴问题吗?

同样,您的customrow.xml可能无效,因为开始TableRow标记缺少结束>,但可能是复制/粘贴问题。

使用android:background="@drawable/bg" bg作为选择器是一种常见的模式,它应该可行。您可能希望简化选择器:您不需要为每个项目和所有组合指定所有状态。它适用于“第一场比赛”,所以这将完成工作:

<?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/custom" />
    <item android:state_selected="true" android:drawable="@android:color/transparent" />
    <item android:state_focused="true" android:drawable="@color/custom" />
    <item android:drawable="@android:color/transparent" />
</selector>

此外,请注意选定且专注的are two different states,专注于使用dpad移动时获得的内容。

如果这没有帮助,请说明“不工作”的含义:您对此有何看法?发生了什么呢?

答案 2 :(得分:0)

添加

<resources>
 <style name="row" parent="@android:style/Widget.Button">
     <item name="android:background">@drawable/rows</item>
</style>
</resources>

在styles.xml中并设置

style="@style/row"
TableRow中的

完成了这项工作。

其中drawable中的rows.xml是

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
    android:state_enabled="false"
        android:drawable="@color/blue" />
    <item
        android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@color/custom" />
    <item
        android:state_focused="true"
        android:state_enabled="true"
        android:drawable="@color/white" />
    <item
        android:state_enabled="true"
        android:drawable="@android:color/transparent" />
</selector>

答案 3 :(得分:0)

不要忘记添加样式

<item name="android:focusable">true</item>
        <item name="android:clickable">true</item>

否则,您将无法使用rowLayout的状态。