android: CheckedTextView kann nicht überprüft werden?
-
26-09-2019 - |
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"/>
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.