2016-07-20 10 views
0

ボタンを備えたAndroid UIライブラリを作成しています。 ボタンには角が丸く、デフォルトのテキストサイズと小文字のタイトルがあります。ユーザーが背景色を変更できるように丸い角を持つカスタムAndroidボタンを提供するにはどうすればよいですか?

これらの属性は固定されていると見なすことができますが、ユーザーは通常、押された状態、無効な状態で独自の背景色を指定できるようにしたいと考えています。

私は次の属性を設定し、マイライブラリ内のスタイルを持っている:LibraryButtonBackground.xml

<style name="LibraryButtonStyle"> 
    <item name="android:textAllCaps">false</item> 
    <item name="android:textSize">18sp</item> 
    <item name="android:background">@drawable/LibraryButtonBackground</item> 
</style> 

私のセレクタは、丸みを帯びた角を実装します。

<?xml version="1.0" encoding="UTF-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:state_enabled="false"> 
    <shape android:shape="rectangle" > 
     <corners android:radius="10dp" /> 
     <!-- <solid android:color="#DDDDDD" /> User should set this --> 
    </shape> 
</item> 
<item android:state_pressed="true"> 
    <shape android:shape="rectangle" > 
     <corners android:radius="10dp" /> 
     <!-- <solid android:color="#DDDDDD" /> User should set this --> 
    </shape> 
</item> 
<item> 
    <shape android:shape="rectangle" > 
     <corners android:radius="10dp" /> 
     <!-- <solid android:color="#DDDDDD" /> User should set this --> 
    </shape> 
</item> 

私は、ユーザーがなりたいです独自のセレクタを記述する必要がなく、丸みのあるコーナーを定義する必要もなく、色を設定することができます。

以下のユーザー実装スタイルは、明らかにバックグラウンドドローラブルをオーバーライドするので、ユーザーがこれを行わない限りコーナーは丸められなくなります。

<style name="UserButtonStyle" parent="LibraryButtonStyle"> 
    <item name="android:background">@drawable/UserButtonBackground</item> 
</style> 

どのように私はこれを達成することができますか?

答えて

1

まず、カスタム属性を定義します。これは通常、リソースのattrs.xmlになります。

<declare-styleable name="LibraryButton"> 
     <attr name="libButtonColor" format="color"/> 
     <attr name="libButtonColorPressed" format="color"/> 
     <attr name="libButtonColorDisabled" format="color"/> 
    </declare-styleable> 

あなたのクライアント(styles.xml)が使用するライブラリテーマがあるとします。

あなたはいくつかのデフォルト値を持つようにしたい:

<style name="Theme.Library" parent="Theme.AppCompat"> 
    <item name="libButtonColor">@color/default_button_color</item> 
    <item name="libButtonColorPressed">@color/default_button_color_pressed</item> 
    <item name="libButtonColorDisabled">@color/default_button_color_disabled</item> 
    . 
    . 
    . 
</style> 

は、クライアントが自分のプロジェクト(のstyles.xml)にこのような何かを行います。

<style name="Theme.Client" parent="Theme.Library"> 
    <item name="libButtonColor">@color/client_button_color</item> 
    <item name="libButtonColorPressed">@color/client_button_color_pressed</item> 
    <item name="libButtonColorDisabled">@color/client_button_color_disabled</item> 
    . 
    . 
    . 
</style> 

そして、ここではどうなるか、あなたのLibraryButtonBackground.xmlリソースファイルですbe:

<?xml version="1.0" encoding="UTF-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_enabled="false"> 
     <shape android:shape="rectangle" > 
      <corners android:radius="10dp" /> 
      <solid android:color="?attr/libButtonColorDisabled" /> 
     </shape> 
    </item> 
    <item android:state_pressed="true"> 
     <shape android:shape="rectangle" > 
      <corners android:radius="10dp" /> 
      <solid android:color="?attr/libButtonColorPressed" /> 
     </shape> 
    </item> 
    <item> 
     <shape android:shape="rectangle" > 
      <corners android:radius="10dp" /> 
      <solid android:color="?attr/libButtonColor" /> 
     </shape> 
    </item> 
</selector> 
+0

素晴らしい作品です。回答ありがとうございます。 – alav

関連する問題