Frage

Am Anfang wollte ich ein Häkchen, wo der Text auf der linken Seite des Häkchens gesetzt wird. Nach der Suche auf dieser Seite fand ich die beste Abhilfe heraus ist android: CheckedTextView? Allerdings fand ich, dass das Häkchen aus kann nicht manuell von den Benutzern geändert werden. Ist es durch Design?

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/autoupdatecheckboxview" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:gravity="center_vertical" 
 android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
 android:paddingLeft="6dip" 
 android:paddingRight="6dip" 
 android:text="Pop up a message when new data available" 
 android:typeface="sans" android:textSize="16dip"/> 
War es hilfreich?

Lösung

Sie wollen wahrscheinlich nur um einen normalen Gebrauch CheckBox (die inherits von Button und somit TextView). CheckedTextView auf die Arbeit mit Listenansichten gestaltet. Beispiel CheckBox Layout XML ist unter:

<CheckBox
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Pop up a message when new data available"
    android:textSize="16dip" />

Andere Tipps

Es ist möglich, etwas einfach zu implementieren, was Sie suchen. Ja, CheckedTextView wird in erster Linie für die in der Reihe eines Checkable eine einzige ListView Ansicht ist, die ihre Kinder überprüfbar Zustände steuern mit choiceMode. Da jedoch CheckBox scheint keine rechtsbündig Checkbox auf seinem eigenen zu unterstützen und CheckedTextView ist ein rechtsbündig Checkbox, ist es sinnvoll verwenden, zu wollen, was da ist.

Da die Listview-Überprüfungsstatus eines Listenelements steuert, die CheckedTextView selbst nicht reagiert Ereignisse klicken, und ist nicht anklickbar oder fokussierbar standardmäßig. Es reagiert auf gedrückt und konzentriert Staaten, aber - das bedeutet es den Fokus erhalten kann und Events klicken und sieht richtig so weit wie eine Checkbox aussehen sollte. Das einzige, was fehlt, ist, dass es nicht Toggle seinen Überprüfungsstatus auf Mausklick. Daher ist ein schneller OnClickListener, dass Anrufe .toggle() werden Sie das Endergebnis für Sie suchen.

Zusammenfassend müssen Sie 3 Dinge: anklickbare, fokussierbar und OnClickListener:

    CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01);
    chkBox.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            ((CheckedTextView) v).toggle();
        }
    });

und Layout-Datei:

<CheckedTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/CheckedTextView01"
    android:checked="true"
    android:clickable="true"
    android:focusable="true"
    android:text="Label on Left Side of Checkbox."
    />

Sie können mit und Toggle CheckedTextView durch die folgende Weise:

Im Layout:

<CheckedTextView
        android:id="@+id/cv_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Some text here" 
        android:textSize="18sp"
        android:gravity="center_vertical"
        android:clickable="true"
        android:checkMark="@drawable/btn_check_off"
        android:focusable="true"
        android:checked="false"
        android:onClick="toggle"/>

In Ihrer Tätigkeit:

public void toggle(View v)
{
    CheckedTextView cView = (CheckedTextView) v.findViewById(R.id.cv_file_name);
        if (cView.isSelected())
        {
            cView.setSelected(false);
            cView.setCheckMarkDrawable (R.drawable.btn_check_off);
        }
        else
        {
            cView.setSelected(true);
            cView.setCheckMarkDrawable (R.drawable.btn_check_on);
        }
}

Und vergessen Sie nicht Drawables zu setzen. Ich bekomme es von SDK ... \ android-sdk-windows \ Plattformen \ android-10 \ data \ res \ ziehbar-MDPI \

einfache Antwort ist, Verwendung. isChecked() Methode statt isSelected()

CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01);
chkBox.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v)
    {
        if(((CheckedTextView) v).isChecked()){
            ((CheckedTextView) v).setChecked(false);
        }else{
            ((CheckedTextView) v).setChecked(true);            
        }
    }
});

und erhält den Status view.isChecked() Methode.

Das Layout sieht aus und funktioniert auf die gleiche Weise wie CheckedTextView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?attr/dropdownListPreferredItemHeight"
    android:gravity="center_vertical" >

    <TextView
        android:id="@android:id/text1"
        style="?android:attr/spinnerDropDownItemStyle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ellipsize="marquee"
        android:singleLine="true" />

    <CheckBox
        android:id="@android:id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="false"
        android:duplicateParentState="true"
        android:focusable="false" />

</LinearLayout>

Nur zusätzliche Lauferei ist ein OnClickListener auf der Stammansicht und Call checkBox.toggle() auf dem CheckBox zu setzen.

Hier ist meine Verwendung in SingleChoiceDialog

1.select_dialog_singlechoice.xml

<?xml version="1.0" encoding="UTF-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="@style/PopupSelectList"
    android:checkMark="@drawable/radio"
    android:ellipsize="marquee"
    android:gravity="center_vertical"
    android:paddingLeft="12.0dip"
    android:paddingRight="10.0dip" />

2.style.xml

<style name="PopupSelectList">
    <item name="android:textSize">16.0sp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:background">@drawable/list_item_selector</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:minHeight">@dimen/dialog_select_height</item>
</style>

3.ratio.xml

<?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/dot_selected" android:state_checked="true" android:state_window_focused="false"/>
    <item android:drawable="@drawable/dot_normal" android:state_checked="false" android:state_window_focused="false"/>
    <item android:drawable="@drawable/dot_normal" android:state_checked="false"/>
    <item android:drawable="@drawable/dot_selected" android:state_checked="true"/>
</selector>

4.In Adapters getView

CheckedTextView title = (CheckedTextView) convertView
                .findViewById(android.R.id.text1);
        title.setText(mItems[position]);
        title.setSelected(mCheckedItem == position ? true : false);
                    title.setCheckMarkDrawable(position == mCheckedItem ?                   R.drawable.dot_selected
                : R.drawable.dot_normal);

Wenn Sie mehr feinkörnige Kontrolle über das Etikett und das Kontrollkästchen wollen, ist eine weitere Alternative RelativeLayout und die Android zu verwenden: layout_alignParentRight Attribut:

<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/my_checkbox_label" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="my checkbox label" />
    <CheckBox
        android:id="@+id/my_checkbox" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />
</RelativeLayout>

Sie können dann den Rand anpassen / etc des Textview und Checkbox an Ihre Bedürfnisse anpassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top