2010-11-22 6 views
4

J'ai un ListView dans lequel chaque élément a une disposition complexe qui contient, à un certain point, un TextView avec android:inputType="text" et android:ellipsize="marquee". Mon problème est que inputType="text" fait quelque chose qui rend l'élément de listview entier cliquable. J'ai essayé:inputType rend l'élément non-cliquable

  • android:descendantFocusability="blocksDescendants" sur le haut plus la mise en page d'un article,
  • android:focusable="false" sur le TextView lui-même,
  • android:focusableInTouchMode="false" sur le TextView lui-même,
  • android:clickable="false" sur le TextView lui-même,
  • android:editable="false" sur le TextView lui-même.

Rien n'a fonctionné.

La raison pour laquelle j'utilise android:inputType="text" sur un TextView est de sorte qu'il devient une seule ligne et que android:ellipsize="marquee" fonctionne réellement. Je l'ai fait mes devoirs:

  • android:singleLine est dépréciée *
  • android:lines="1", comme l'a suggéré here, ne fonctionne pas, le texte enveloppe encore, vous ne comprends pas voir la deuxième ligne, de sorte que le L'effet de sélection n'apparaît pas.

* ou est-ce? Mon Ctrl + Espace dans Eclipse dit ceci au sujet android:singleLine (Souligné par l'auteur):

Contraint le texte à une seule ligne défilement horizontal au lieu de laisser envelopper sur plusieurs lignes, et les progrès se concentrer au lieu de insérer un saut de ligne lorsque vous appuyez sur la touche Entrée. * Déconseillé: Cet attribut est obsolète et est remplacé par l'indicateur textMultiLine dans l'attribut inputType. Soyez prudent lorsque vous modifiez dispositions existantes, car la valeur par défaut de singeLine est false (mode de ligne multi- ), mais si vous spécifiez une valeur pour inputType, la valeur par défaut est le mode ligne unique. (Si les attributs singleLine et inputType sont trouvés, les indicateurs inputType remplacent la valeur de singleLine.). [booléen]

Cependant, the docs ne dit rien sur n'importe quelle dépréciation.

Que se passe-t-il ici?

+0

J'ai exactement le même problème ... fallback est d'utiliser l'android: singleline obsolète, mais j'aimerais voir comment y parvenir sans l'utiliser. –

Répondre

2

En fait, dans the official documentation of R.attr, la constante d'attribut est obsolète. Cependant, comme mentionné, ceci est en contradiction avec the TextView documentation page. Et en regardant les méthodes liées, la définition de l'attribut singleLine est équivalente à:

myTextView.setTransformationMethod(new SingleLineTransformationMethod()); 

qui n'est pas non plus obsolète. Et c'est comme ça que je danse autour de cette dépréciation.

0

Je ne sais pas si je comprends bien vos besoins, mais si je fais ici, c'est le code que j'ai utilisé pour l'élément de liste (il a l'image à gauche et le texte à droite).):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:orientation="horizontal" 
    android:gravity="center_vertical" 
    android:padding="5dip"> 

    <ImageView android:id="@+id/list_item_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingRight="10px" /> 

    <TextView android:id="@+id/list_item_label" 
     android:textSize="16sp" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ellipsize="marquee" 
     android:maxLines="2" 
     android:inputType="textMultiLine" /> 

</LinearLayout> 

Si vous avez besoin 1 limite de ligne probablement essayer d'utiliser android:maxLines="1"?

+0

Cela ne semble pas fonctionner, l'effet de sélection n'est pas visible (comme avec 'lines =" 1 "'. En outre, 'inputType =" textMultiLine "' rend l'élément entier non cliquable, tout comme 'inputType =" text '. – Felix

0

Tant que the official, online documentation ne mentionne pas que singleLine est obsolète, je ne le considérerai pas comme tel. Ce doit être un bug dans le SDK. J'utiliserai singleLine tant qu'il ne sera pas marqué comme obsolète dans la documentation et jusqu'à ce qu'il y ait une alternative qui fonctionne bien, non obsolète.