2010-11-22 16 views
4

Ich habe eine ListView in der jedes Element ein komplexes Layout hat, das an einem bestimmten Punkt eine TextView mit android:inputType="text" und android:ellipsize="marquee" enthält. Mein Problem ist, dass inputType="text" tut etwas, die das gesamte ListView-Element nicht anklickbar macht. Ich habe versucht:inputType macht Element nicht anklickbar

  • android:descendantFocusability="blocksDescendants" am meisten Top-Layout eines Artikels,
  • android:focusable="false" auf dem TextView selbst
  • android:focusableInTouchMode="false" auf dem TextView selbst
  • android:clickable="false" auf dem TextView selbst,
  • android:editable="false" auf der TextView selbst.

Nichts hat funktioniert.

Der Grund, warum ich android:inputType="text" auf einem TextView verwende, ist so, dass es einzeilig wird und android:ellipsize="marquee" tatsächlich funktioniert. Ich habe meine Hausaufgaben gemacht:

  • android:singleLine veraltet *
  • android:lines="1", wie here vorgeschlagen, nicht funktioniert, wird der Text noch hüllt, die Sie gerade nicht bekommen, die zweite Linie zu sehen, so dass die Der Laufschrift-Effekt wird nicht angezeigt.

* oder ist es? Meine Strg + Leertaste in Eclipse sagt über android:singleLine (Hervorhebung von mir):

Schränkt den Text zu einem einzigen horizontal scrollen Linie statt lässt sie auf mehrere Zeilen erstrecken, und Fortschritte konzentrieren, anstatt Einfügen eine neue Zeile, wenn Sie drücken die Eingabetaste. * Veraltet: Dieses Attribut ist veraltet und wird durch das Flag textMultiLine im Attribut inputType ersetzt. Seien Sie vorsichtig, wenn Sie vorhandene Layouts ändern, da der Standardwert von singeLine falsch ist (multi- Zeilenmodus), aber wenn Sie einen Wert für inputType angeben, ist der Standard ein Zeilenmodus. (Wenn die Attribute singleLine und inputType gefunden werden, überschreiben die inputType-Flags den Wert singleLine.). [boolean]

Allerdings, the docs sagen Sie nichts über eine Vernachlässigung.

Was geht hier vor?

+0

Ich habe genau das gleiche Problem ... Fallback ist die Verwendung der veralteten Android: Singleline, würde aber gerne sehen, wie dies zu erreichen, ohne es zu verwenden. –

Antwort

2

Tatsächlich in the official documentation of R.attr dieses Attribut Konstante ist veraltet.

Jedoch (wie erwähnt) widerspricht dies the TextView documentation page. Und wenn bei den verwandten Methoden suchen, ist das Attribut single Einstellung entspricht:

myTextView.setTransformationMethod(new SingleLineTransformationMethod()); 

, die auch nicht veraltet. Und so tanze ich um diese Missbilligung herum.

0

Nicht sicher, ob ich Ihre Bedürfnisse vollständig verstehe, aber wenn ich hier tue, ist der Code, den ich für Listenelement verwendet (es hat Bild auf der linken Seite und Text auf der rechten Seite, der Text ist mit 2 Zeilen begrenzt und verwendet Ellipsenfunktion):

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

Wenn Sie 1 Zeile Grenze wahrscheinlich müssen versuchen android:maxLines="1" zu benutzen?

+0

Dies scheint nicht zu funktionieren, der Marquee-Effekt ist nicht sichtbar (genau wie bei 'lines =" 1 "'. Außerdem macht 'inputType =" textMultiLine "' das ganze Element unclickbar, genau wie 'inputType =" text " '. – Felix

0

Solange the official, online documentation nicht erwähnt, dass singleLine veraltet ist, werde ich es nicht so betrachten. Es muss ein Fehler im SDK sein. Ich werde singleLine so lange verwenden, wie es in der Dokumentation nicht als veraltet markiert ist und bis es eine voll funktionsfähige, nicht veraltete Alternative gibt.

Verwandte Themen