2011-03-16 6 views
1

J'ai un problème avec un TableRow, que j'ajoute dynamiquement.Fond Android 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);  
    } 

Je voudrais cette ligne pour changer la couleur sur onClick et onLongClick.

code dans le fichier customrow.xml est:

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

J'ai essayé d'utiliser android:background="@drawable/clickedbackground" avec la ligne, mais il ne fonctionne pas.

code dans le fichier clickedbackground.xml est:

<?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> 

Tout le monde sait ce que je fais mal (couleur/personnalisé est défini dans un autre xml qui fonctionne)?

Merci

Répondre

0

Ajout

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

dans styles.xml et la mise en

style="@style/row" 

dans le TableRow a fait le travail.

où le rows.xml dans le drawable est

<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> 
0

Dans votre méthode addRow() vous gonfler la ligne, mais vous n'êtes pas l'ajouter à une mise en page de parent, et comme row est une variable locale, je pense que vous ne le faites pas nulle part ailleurs, est-ce un problème de copier/coller?

Encore une fois, votre customrow.xml pourrait être ne fonctionne pas parce que la balise d'ouverture TableRow n'a pas la fermeture >, mais il pourrait être un problème de copier/coller.

L'utilisation de android:background="@drawable/bg" avec bg étant un sélecteur est un modèle courant et cela devrait fonctionner. Vous pourriez vouloir simplifier votre sélecteur: vous n'avez pas besoin de spécifier tous les états pour chaque élément et toutes les combinaisons. Il fonctionne avec un « premier match », donc cela fera le travail:

<?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> 

En outre, un avis qui a choisi et ciblé are two different states, concentré étant celui que vous obtenez lorsque se déplacer avec dpad.

Si cela n'a pas aidé, veuillez préciser ce que "ne fonctionne pas" signifie: qu'attendez-vous? Qu'est-ce qui se passe à la place?

+0

OK. Il y a quelques problèmes de copier/coller :) La ligne est ajoutée dans addRow(), donc c'est un problème de copier/coller. Comme le manque> dans le xml. J'ai essayé avec votre xml, mais cela n'a pas aidé non plus. Le problème est que la ligne ne change pas de couleur lorsqu'elle est pressée. La rangée est là et fonctionne comme je devrais, sauf le changement de couleur. – Bastaix

+1

@Bastaix Je suis désolé mais je ne sais pas ce qui pourrait se passer. Cela devrait fonctionner même sans un écouteur onClick. Oh, attends, essaye de mettre 'android: clickable =" true "' dans la balise 'TableRow'. – bigstones

+0

Non, cela n'a pas aidé non plus. Je vais devoir continuer ma recherche. Je vous remercie – Bastaix

2

Vous créez objet pour tablerow ligne nommée. et vous avez aussi le fichier clickedbackground.xml. il suffit d'utiliser le code ci-dessous dans la méthode addRow.

row.setBackgroundResource(R.drawable.clickedbackground);

Je pense que cela résout votre problème.

0

ne pas oublier d'ajouter au style

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

Sinon, vous ne serez pas en mesure d'utiliser les états d'un rowLayout.