14

プリミティブ シェイプを再利用し、これらの宣言型 XML 要素を使用してユーザー インターフェイスの多くを構成しようとしています。

可変Android属性を作成するには?

しかし、属性値とその順列ごとに個別の XML ファイルを作成し、その過程で多くの作業を重複させたくはありません。

たとえば、この形状の消費者が android:radius 値を定義できるようにしたいと思いますか?

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
            android:startColor="#449def"
            android:endColor="#2f6699"
            android:angle="270"/>
    <stroke
            android:width="1dp"
            android:color="#2f6699"/>
    <corners
            android:radius="3dp"/>
</shape>

XML の親を使用して属性を設定しますか?

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/shape_box_round_blue_uniform" />
    <!-- How to set the corner radius here? -->
    <item android:drawable="@drawable/shape_box_round_blue" />
</selector>

ソリューション?

  • 可能であれば、Java コード ビハインドを使用したくない / カスタム コントロール / クラスを作成する必要を避けたい
  • ディメンション リソースを使用することは、実り多い手段になる可能性がありますか?
4

1 に答える 1

4

作成できます

スタイル属性

、あなたが探しているものだと思います。それらは基本的に可変属性です。たとえば、themes.xml でこれを使用できます。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- You can define attributes here -->
    <attr name="button_radius" format="reference" />
</resources>

これは、button_radius と呼ばれる変数参照を定義します。これは、スタイルまたはレイアウト xml ファイルで使用できます。

<!-- You can use them like so: -->
<style name="MyApp.Theme1" parent="android:Theme.Holo.Light">
    <item name="button_radius">12</item>
</style>

<style name="MyApp.Theme2" parent="android:Theme.Holo.Light">
    <item name="button_radius">36</item>
</style>

このように、テーマを変更することで、半径に異なる値を使用できます。以下は、シェイプ ドローアブルを変更する方法の未テストの例です。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#449def"
        android:endColor="#2f6699"
        android:angle="270"/>
    <stroke
        android:width="1dp"
        android:color="#2f6699"/>
    <corners
        android:radius="?button_radius"/> <!-- NOTE the ?button_radius-->
</shape>

ユーザーは、異なる属性を使用するために異なるスタイルを適用するだけです。この例があなたの質問に完全に答えるかどうかはわかりませんが、テーマで属性を宣言することでできることはたくさんあります。これらの属性は動的参照です。可能性の詳細については、この記事を参照してください

于 2013-04-02T18:47:57.033 に答える