Aku mencoba untuk menimpa default ToggleButton
penampilan. Inilah XML yang mendefinisikan ToggleButton
:
<ToggleButton android:id="@+id/FollowAndCenterButton"
android:layout_width="30px"
android:layout_height="30px"
android:textOn="" android:textOff="" android:layout_alignParentLeft="true"
android:layout_marginLeft="5px"
android:layout_marginTop="5px" android:background="@drawable/locate_me"/>
Sekarang, kami memiliki dua ikon 30 x 30 yang ingin kami gunakan untuk status diklik / tidak diklik. Saat ini kami memiliki kode yang secara terprogram mengubah ikon latar belakang tergantung pada status:
centeredOnLocation.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (centeredOnLocation.isChecked()) {
centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me_on));
} else {
centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me));
}
}
});
Jelas saya sedang mencari cara yang lebih baik untuk melakukan ini. Saya telah mencoba membuat pemilih untuk gambar latar belakang, yang secara otomatis akan beralih di antara status:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/locate_me" /> <!-- default -->
<item android:state_checked="true"
android:drawable="@drawable/locate_me_on" /> <!-- pressed -->
<item android:state_checked="false"
android:drawable="@drawable/locate_me" /> <!-- unchecked -->
Tapi ini tidak berhasil; membaca ToggleButton
API ( http://developer.android.com/reference/android/widget/ToggleButton.html ), tampaknya satu-satunya atribut xml yang diwariskan adalah
XML Attributes
Attribute Name Related Method Description
android:disabledAlpha The alpha to apply to the indicator when disabled.
android:textOff The text for the button when it is not checked.
android:textOn The text for the button when it is checked.
Sepertinya tidak ada atribut android: state_checked, meskipun kelas tersebut memiliki metode isChecked()
dansetChecked()
.
Jadi, apakah ada cara untuk melakukan apa yang saya inginkan dalam XML, atau apakah saya terjebak dengan solusi yang berantakan?
sumber
CompoundButton
.CompoundButton
abstrak!Jawaban:
Kode Anda baik-baik saja. Namun, tombol sakelar akan menampilkan item pertama di selektor Anda yang cocok, jadi defaultnya harus yang terakhir. Atur barang-barang dengan cara berikut untuk memastikan semuanya akan digunakan:
sumber
switch
akan selalu memilih "yang benar" terlepas dari urutannya, ini berperilaku lebih seperti waktu yang lamaif-elseif-elseif-else
dengan kondisi sepertistate_x == true && state_y == false && state_z = true
.