Domanda

Inizialmente mi voleva un segno di spunta in cui il testo è posto sulla sinistra del segno di spunta. Dopo la ricerca su questo sito ho scoperto che la migliore soluzione è Android: CheckedTextView? Tuttavia, ho scoperto che il segno di spunta non può essere modificato manualmente dagli utenti. E 'dal disegno?

<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"/> 
È stato utile?

Soluzione

Probabilmente si desidera utilizzare solo un normale CheckBox (che eredita da Button e quindi TextView). CheckedTextView è progettato per funzionare con visualizzazioni elenco. Esempio di layout CheckBox XML è qui sotto:

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

Altri suggerimenti

E 'possibile, e un po' semplice da implementare ciò che si sta cercando. Sì, CheckedTextView è utilizzato principalmente per avere un unico punto di vista Checkable nella riga di un ListView, che controlla gli stati controllabili dei suoi figli usando choiceMode. Tuttavia, dal momento che CheckBox non sembra supportare una casella di controllo allineato a destra da sola, e CheckedTextView è una casella di controllo allineato a destra, ha senso voler usare quello che c'è.

A causa ListView controlla lo stato controllato di un elemento della lista, il CheckedTextView in sé non risponde agli eventi click, e non è cliccabile o attivabile per impostazione predefinita. Lo fa rispondere a stati pressati e mirati, tuttavia - questo significa che può ricevere l'attivazione e fare clic su eventi, e sembra corretto, per quanto una casella di controllo dovrebbe apparire. L'unica cosa che manca è che non è così cambiarne lo stato controllato al clic. Di conseguenza, un rapido OnClickListener che le chiamate .toggle() vi darà il risultato finale che stai cercando.

In sintesi, è necessario 3 cose: cliccabili, focusable, e onClickListener:

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

e file di layout:

<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."
    />

È possibile utilizzare e ginocchiera CheckedTextView dal seguente senso:

In 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"/>

Nella vostra attività:

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);
        }
}

E non dimenticate di mettere drawable. Ho capito da SDK ... \ android-sdk-windows \ piattaforme \ android-10 \ data \ res \ drawable-MDPI \

risposta è semplice utilizzo:. Metodo isChecked() invece di 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);            
        }
    }
});

e ottenere lo stato utilizzando il metodo view.isChecked().

Questa disposizione sembra e si comporta allo stesso modo di 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>

Solo noia in più è quello di impostare un OnClickListener sulla vista delle radici e delle chiamate checkBox.toggle() sul CheckBox.

Ecco il mio impiego 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>

GetView di 4.In adattatore

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

Se si desidera un maggiore controllo a grana fine sopra l'etichetta e la casella di controllo, un'altra alternativa è quella di utilizzare RelativeLayout e l'attributo android: layout_alignParentRight:

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

è possibile quindi regolare il margine di / etc del TextView e casella di controllo per soddisfare le vostre esigenze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top