0

我有一个带有可绘制状态列表的复选框和我自己的图形(用于游戏)。内置的复选框图形显然是 72x72,而我的图形是 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 像素。

4

1 回答 1

1

好的,我终于想通了。这个链接导致详细了解更改复选框的外观,其中我发现默认背景实际上是一个图像(它是一个 9 补丁,以容纳文本)。底层背景图像原来是 e 60x60,因此是我麻烦的原因。我已经在我的资源中放置了我自己的背景图像,并通过添加从布局中引用它

android:background="@drawable/my_background"

到布局中的复选框定义。

于 2011-11-13T19:25:43.650 回答