私はアプリでボタンの背景色を設定しようとしていますが、希望する結果を達成できません...
設定しようとしている色はholo_green_light(#ff99cc00)
です。それをするために、私はsetColorFilter(0xff99cc00, PorterDuff.Mode.MULTIPLY);
を使用しています
私が得る色はholo_green_light
ではなく、ライトグレーとholo_green_light
の混合です。
LightingColorFilter
を使用してみましたが、ほとんど成功しませんでした。
プログラムでそれを行う方法はありますか?ボタンはボタンのように見え、必要な色の平らな長方形ではありません。
ボタンは、1つの色を変更するよりも複雑です...
Androidボタンは、かなり多くの9パッチと状態ドロウアブルを使用して作成されます。 Android Holo Colors を見て、それらを生成する必要があります。「Color Button」を選択すると、必要な画像とxmlが生成されます...
これが、異なる色のカスタムボタンを作成する私の方法です。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<stroke Android:width="3dp"
Android:color="#80FFFFFF" />
<corners Android:radius="25dp" />
<gradient Android:angle="270"
Android:centerColor="#90150517"
Android:endColor="#90150517"
Android:startColor="#90150517" />
</shape>
このようにして、背景として設定します。
<Button Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Button"
Android:layout_marginBottom="25dp"
Android:layout_centerInParent="true"
Android:background="@drawable/button"/>
一般的なスタイル(角丸など)を維持し、背景色を変更する場合は、backgroundTintプロパティを使用します。
Android:backgroundTint="@Android:color/holo_green_light"
ハードコーディングを気にしない場合は、これを行って〜> Android:background = "#eeeeee"を実行し、希望する16進数の色をドロップします。
このように見える...
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/textView1"
Android:text="@string/ClickMe"
Android:background="#fff"/>
次の内容で/res/drawable/button.xml
を作成します。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" Android:padding="10dp">
<!-- you can use any color you want I used here gray color-->
<solid Android:color="#90EE90"/>
<corners
Android:bottomRightRadius="3dp"
Android:bottomLeftRadius="3dp"
Android:topLeftRadius="3dp"
Android:topRightRadius="3dp"/>
</shape>
そして、次を使用できます:
<Button
Android:id="@+id/button_save_prefs"
Android:text="@string/save"
Android:background="@drawable/button"/>
そのハードコアである必要はありません。
これを試して :
YourButtonObject.setBackground(0xff99cc00);
なぜsetBackgroundColor(getResources().getColor(R.color.holo_light_green))
を使用しないのですか?
編集:Androidボタンのように見えるものが必要な場合は、グラデーションを作成し、それを背景として設定します。この例については、 this question をご覧ください。
マークプロクターの答えに加えて:
デフォルトのスタイルを維持したいが、ボタンに条件付きの色を付けたい場合は、次のようにbackgroundTint
プロパティを設定するだけです。
Android:backgroundTint="@drawable/styles_mybutton"
関連ファイル/res/drawable/styles_mybutton.xmlを作成し、次のテンプレートを使用して、好みに応じて色を変更します。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- Disabled state-->
<item Android:state_enabled="false"
Android:color="@Android:color/white">
</item>
<!-- Default state-->
<item
Android:color="#cfc">
</item>
</selector>
スタイルを維持するには、次を使用します。
int color = Color.parseColor("#99cc00");
button.getBackground().mutate().setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC));