Android TableRow背景

Android TableRow背景,android,layout,onclick,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 n

我对动态添加的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);       
    }
我想在
onClick
onlonglick
时更改此行的颜色

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>
<?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中定义的)

谢谢您

在您的
addRow()
方法中,您正在膨胀行,但没有将其添加到任何父布局中,并且由于
是一个局部变量,我认为您没有在其他任何地方进行此操作,这是一个复制/粘贴问题吗

同样,您的
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>

另外,请注意,当您使用dpad四处移动时,您会得到选中的、集中的、集中的

如果这没有帮助,请具体说明“不工作”的含义:你期望什么?发生了什么事?

添加

<resources>
 <style name="row" parent="@android:style/Widget.Button">
     <item name="android:background">@drawable/rows</item>
</style>
</resources>
在桌子上,这一行做了这项工作

其中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>

您正在为
表格行
命名行创建对象。您还有
clickedbackground.xml
文件。只需在
addRow
方法中使用下面的代码

row.setBackgroundResource(R.drawable.clickedbackground)


我想它解决了你的问题。

别忘了添加样式

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

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

好的。存在两个复制/粘贴问题:)该行正在addRow()中添加,因此这是一个复制/粘贴问题。正如xml中缺少的>。我尝试过使用您的xml,但也没用。问题是,按下时,行的颜色不会改变。这一行就在那里,除了颜色的变化,我的工作正常。@Bastaix我很抱歉,但我不知道会出什么问题。即使没有onClick侦听器,这也应该可以工作。哦,等等,试着把android:clickable=“true”
放在
TableRow
标签中。不,这也没用。我必须继续我的搜索。非常感谢。
<item name="android:focusable">true</item>
        <item name="android:clickable">true</item>