2010-06-25 4 views

Antwort

9

Ich glaube nicht, dass Sie können. Betrachtet man die source code, scheint es, als ob das Häkchen ständig auf der rechten Seite gezeichnet ist. Und, um ehrlich zu sein, ich würde empfehlen, dass Sie dabei bleiben, aus Gründen der Konsistenz - Android wird ständig geklopft, weil seine Apps inkonsistente UIs haben.

In der unwahrscheinlichen Fall, dass jemand eine Waffe an dem Kopf zeigt, zwingen Sie die Platzierung des Häkchens zu ändern, Unterklasse CheckedTextView als OMGPleaseDontShootCheckedTextView und Methoden außer Kraft setzen wie onDraw(), mit gezwickt Versionen des Originals, dass die Platzierung von Änderungen das Bild und der Text.

+0

Dank Dies ist hilfreich ! –

+7

Jetzt mit Material Design Häkchen sollten auf der linken Seite sein, aber der Code, um dies zu erlauben ist leider privat, so kann nicht einfach rückportiert werden. –

28

Erstellen Sie Ihre eigene Zeilenvorlage und legen Sie Android: DrawableLeft auf der CheckedTextView.

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
android:layout_width="fill_parent" 
android:layout_height="40dip" 
android:gravity="center_vertical" 
android:paddingLeft="5dip" 
android:drawableLeft="?android:attr/listChoiceIndicatorMultiple" 
/> 

oder

android:drawableLeft="?android:attr/listChoiceIndicatorSingle" 
+2

Das hindert Sie daran, die zusammengesetzte Zeichenfunktionalität zusammen mit dem Häkchenindikator zu verwenden (was CheckedTextView standardmäßig zulässt). Ich denke @CommonsWare Antwort ist passender. –

-4

android: drawableLeft = "android: attr/listChoiceIndicatorMultiple": P

25

Das Geheimnis in Android ist: Häkchen machen es null

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/checked_text_single_choice" 
android:layout_width="match_parent" 
android:layout_height="52dp" 
android:checkMark="@null" 
android:gravity="center_vertical" 
android:textAppearance="?android:attr/textAppearanceSmall" 
android:drawableLeft="?android:attr/listChoiceIndicatorSingle" 
android:drawableRight="@null" 
android:textColor="@android:color/black" 
/> 
+2

Ich kann nicht glauben, dass dies funktioniert. danke – j2emanue

+0

working solution – vuhung3990

+1

was magie ist das? es ist nicht einmal logisch, aber funktioniert! – Ogbe

0

versuchen Sie dieses und hoffen, dass es Ihnen einige Ideen

geben wird 0
<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:orientation="horizontal" > 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Connection lost sound alert" 
       android:layout_weight="10" 
       android:layout_gravity="center" 
      /> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="2"  
      android:layout_gravity="right" 
      android:orientation="horizontal" > 

      <CheckBox android:id="@+id/checkbox_meat" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right"     
       android:onClick="onCheckboxClicked"/> 

     </LinearLayout> 


    </LinearLayout> 
7

Wenn Sie das Kontrollkästchen auf der linken Seite möchten, verwenden Sie einfach eine CheckBox. Vielleicht ist es nicht selbstverständlich, aber ein CheckBox kann Text enthalten. Sie können diesen Text definieren, indem Sie ein XML-Attribut android:text hinzufügen oder die Methode setText() aufrufen. Eigentlich CheckBox ist von Button vererbt, die von TextView erbt, deshalb hat es alle textbezogenen Eigenschaften.

+0

hinzugefügt Beispiel 'CheckBox' xml mit Screenshot in separaten Antwort –

2

Ein Beispiel für den Vorschlag von @ WonderCsabo, CheckBox zu verwenden.

<CheckBox 
    android:id="@+id/create_account_checkedTextView_password" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Show" 
    android:gravity="center" 
    android:checked="true" 

    # relative layout params 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentRight="true" 
    android:layout_above="@+id/hint1" /> 

checkbox_example

2

Es kann wie in diesem Beitrag einen Trick mit Überprüfbar-Layout sein - https://chris.banes.me/2013/03/22/checkable-views/ . Verwenden Sie einfach einige benutzerdefinierten Layouts wie dies als Listview-Element Layout:

<com.example.custom_view.CheckableLinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 
<CheckedTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle" 
    android:duplicateParentState="true" 
    .../> 
<TextView 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    .../> 
</com.example.custom_view.CheckableLinearLayout> 

oder

android:checkMark=?android:attr/listChoiceIndicatorMultiple" 
2

Sie Ihre ziehbar zu drawableLeft Attribute zuweisen kann, aber es wird dir nicht gut, weil es nicht Tönungs unterstützen . Stattdessen erweitert ich CheckedTextView wie folgt aus:

public class LeftSideCheckedTextView extends CheckedTextView { 

    public LeftSideCheckedTextView(Context context) { 
     this(context, null, 0); 
    } 

    public LeftSideCheckedTextView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public LeftSideCheckedTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     Field mCheckMarkGravity = null; 
     try { 
      mCheckMarkGravity = this.getClass().getSuperclass().getDeclaredField("mCheckMarkGravity"); 
      mCheckMarkGravity.setAccessible(true); 
      mCheckMarkGravity.set(this, Gravity.START); 
     } catch (Exception e) { 
      Logger.error(e); 
     } 
    } 
} 

Hier habe ich das versteckte Feld mCheckMarkGravity zugreifen, die im Inneren CheckedTextView verwendet wird, haben aber keinen Zugriff über Stilattribute, nach diesem Fehler Ticket: https://code.google.com/p/android/issues/detail?id=174517

Verwandte Themen