如何在样式文件中定义drawable的大小?

Cal*_*laf 6 android dry android-layout android-view android-drawable

我想在res/values/styles.xml中只指定一次两个复选框及其四个形状drawable的大小

  1. RES /抽拉/ cb1_checked.xml
  2. RES /抽拉/ cb1_unchecked.xml
  3. RES /抽拉/ cb2_checked.xml
  4. res/drawable/cb2_unchecked.xml.

这样,尺寸将在样式中出现一次,而不是在drawable中出现四次.

下面的两次尝试都不起作用.你能建议一个解决方案吗?(如果您发现这两次尝试有什么问题,请提及.)

-------------------------------------------------- -------------- 尝试1 ---------------------------------- ------------------------------

更换

RES /抽拉/ cb1_checked.xml

<size android:width="24dp"
      android:height="24dp" />
Run Code Online (Sandbox Code Playgroud)

RES /值/ styles.xml

<item name="android:layout_width">24dp</item>
<item name="android:layout_height">24dp</item>
Run Code Online (Sandbox Code Playgroud)

-------------------------------------------------- -------------- 尝试2 ---------------------------------- ------------------------------

RES /值/ styles.xml

<item name="android:background">cb_background</item>
Run Code Online (Sandbox Code Playgroud)

并定义一个可绘制的背景

RES /抽拉/ cb_background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#00FF00"/>
    <size android:width="24dp"
          android:height="24dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)

-------------------------------------------------- --------------已添加 ----------------------------------- -----------------------------

以下是完整的XML文件集:

RES /布局/ activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyLL"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <CheckBox
        android:id="@+id/cb1"
        style="@style/CB_style"
        android:button="@drawable/cb1_selector"
        android:height="@dimen/my24sp" />

    <CheckBox
        android:id="@+id/cb2"
        style="@style/CB_style"
        android:button="@drawable/cb2_selector"
        android:height="@dimen/my24sp" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

RES /值/ styles.xml

<style name="AppBaseTheme" parent="android:Theme.Light">
</style>

<style name="AppTheme" parent="AppBaseTheme">
</style>

<style name="CB_style" parent="@android:style/TextAppearance.Medium">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_weight">1</item>
    <item name="android:layout_gravity">center_horizontal</item>
    <item name="android:gravity">center</item>
    <item name="android:checked">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

RES /抽拉/ cb1_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:constantSize="true">

    <item android:state_checked="true"
          android:drawable="@drawable/cb1_checked" />

    <item android:state_checked="false"
          android:drawable="@drawable/cb1_unchecked" />

</selector>
Run Code Online (Sandbox Code Playgroud)

RES /抽拉/ cb1_checked.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#FF0000"/>
    <size android:width="24dp"
          android:height="24dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)

RES /抽拉/ cb1_unchecked.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#880000"/>
    <size android:width="24dp"
          android:height="24dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)

(类似于cb2选择器和已检查/未选中的drawables)

Cal*_*laf 6

有一个弱解决方案,在android:widthandroid:height仍然出现四次的意义上很弱,但至少可以通过设置一个参数来调整维度.

对于四个drawable中的每一个,添加

<size android:width="@dimen/my24dp"
      android:height="@dimen/my24dp" />
Run Code Online (Sandbox Code Playgroud)

并定义维度

RES /值/ dimens.xml

<dimen name="my24dp">24dp</dimen>
Run Code Online (Sandbox Code Playgroud)

所以问题仍然存在:可以在drawables中根本没有指定大小吗?