#android #checkbox #statelistdrawable
#Android #флажок #statelistdrawable
Вопрос:
У меня есть флажок с возможностью отображения списка состояний и моей собственной графикой (это для игры). Встроенная графика флажка, по-видимому, 72×72, а моя графика 72 в высоту, но только 27 в ширину.
Фрагмент моего main.xml макет:
<CheckBox android:id="@ id/r_diff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@ id/reset"
android:layout_alignParentBottom="true"
android:onClick="onClickRDiff"
android:button="@drawable/console_select_switch" />
И вот мой console_select_switch.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector android:constantSize="true"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/consw_cntr" /> <!-- pressed -->
<item android:state_checked="true"
android:drawable="@drawable/consw_down" /> <!-- checked -->
<item android:drawable="@drawable/consw_up" /> <!-- default -->
</selector>
Теперь, когда я запускаю программу, мои графики действительно отображаются, и они действительно работают, НО они занимают столько же ширины, сколько исходная квадратная графика в 72 пикселя. Я даже пытался установить
android:width="27px"
в операторах выбора элемента, также без эффекта. Я даже пытался превратить constantSize в ‘false’, но это не имело никакого эффекта.
Мне неясно, какого черта я делаю неправильно — я понимаю, что wrap_content должен сделать его «настолько широким, насколько это необходимо», поэтому я предположил, что это просто сработает. Интересно, что когда я использовал часть той же графики, что и Android: background в обычной кнопке, она работала нормально.
Редактировать: уровень API в моем проекте установлен на 7 (Android 2.1), если это имеет какое-либо значение (глядя на документы, я думаю, что все, что я использую, было на месте в течение длительного времени, поэтому я сомневаюсь в этом).
Редактировать: Я просто поиграл с установкой текста в этом элементе управления (я пробовал различные значения, включая пустую строку для параметра android: text), и текст отображается справа от области, которую занимает флажок (а не область, фактически занятая графикой). Очевидно, что что-то думает, что этот флажок имеет ширину 72 пикселя, когда на самом деле это 27.
Ответ №1:
Хорошо, я наконец понял это. Эта ссылка приводит к подробному рассмотрению изменения внешнего вида флажка, в котором я выяснил, что фоном по умолчанию фактически является изображение (это 9-патч для размещения текста). Базовое фоновое изображение получается размером 60×60 и, таким образом, было причиной моих проблем. Я поместил собственное фоновое изображение в свои ресурсы и сослался на него из макета, добавив
android:background="@drawable/my_background"
к определению флажка в макете.