Флажок с возможностью отображения списка состояний, занимающий больше места, чем требуется для графики

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

к определению флажка в макете.