How can I define the size of the drawables in the style file?

早过忘川 提交于 2019-12-10 13:42:59

问题


I would like to specify just once in res/values/styles.xml the size of two checkboxes and their four shape drawables

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

This way the size would appear one time in the style rather than four in the drawables.

Neither of the two attempts below work. Can you suggest a solution? (If you see what's wrong with these two attempts, please do mention it.)

----------------------------------------------------------------Attempt 1----------------------------------------------------------------

Replace

res/drawable/cb1_checked.xml

<size android:width="24dp"
      android:height="24dp" />

with

res/values/styles.xml

<item name="android:layout_width">24dp</item>
<item name="android:layout_height">24dp</item>

----------------------------------------------------------------Attempt 2----------------------------------------------------------------

Add

res/values/styles.xml

<item name="android:background">cb_background</item>

and define a background drawable

res/drawable/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>

----------------------------------------------------------------Added----------------------------------------------------------------

Here is the full set of XML files:

res/layout/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>

res/values/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>

res/drawable/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>

res/drawable/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>

res/drawable/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>

(and similarly for the cb2 selector and checked/unchecked drawables)


回答1:


There is a weak solution, weak in the sense that android:width and android:height still appear four times, but at least the dimension can be adjusted by setting just one parameter.

For each of the four drawables, add

<size android:width="@dimen/my24dp"
      android:height="@dimen/my24dp" />

and also define the dimension

res/values/dimens.xml

<dimen name="my24dp">24dp</dimen>

So the question remains: Can the size not be specified at all in the drawables?




回答2:


you could store your size as a ressource in the res/values/dimens.xml like

<resources>
    <dimen name="checkbox_width">24dp</dimen>
</resources>

and put this value to your layouts like

<CheckBox
        android:layout_width="@dimen/checkbox_width"
        android:layout_height="@dimen/checkbox_width" />


来源:https://stackoverflow.com/questions/16697160/how-can-i-define-the-size-of-the-drawables-in-the-style-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!