web-dev-qa-db-ja.com

アンドロイドで丸い角と一緒にボタン選択色を設定する方法は?

Androidでボタンの角を丸く設定し、選択時にボタンの色をオンに変更したい。次のことを行っています。

drawable/Push_button.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="@color/green"/>
    <item Android:state_focused="true"  Android:drawable="@color/green"/>
    <item Android:state_focused="false"  Android:drawable="@color/green"/>
    <item Android:state_pressed="false" Android:drawable="@color/red"/>
    <item  Android:drawable="@drawable/Push_button_background"/>         
</selector>

drawable/Push_button_background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" 
    >
    <solid Android:color="#3F4040"/>
    <corners 
    Android:radius="7dp"
    />
</shape>

コードでは、私は使用しています

Android:background="@drawable/Push_button"

ここでの問題は、選択および選択解除したときにボタンの色が正しく設定されていることです。しかし、角の丸みは機能していません。

どうやってするか?使用する場合

Android:background="@drawable/Push_button_background"

その後、角の丸みは機能しますが、選択時のボタンの色の変更は機能しません

これを実装する方法は?

this リンクを参照しました。それでも仕方ない!!

17
Bharath

試行錯誤の試みをほとんどせずに、私の質問に対する答えを見つけました。

これが解決策です。

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

 <item Android:state_pressed="true">
    <shape  >
    <solid Android:color="@color/green"/>
    <corners 
    Android:radius="7dp"/>
    </shape>
 </item>

 <item Android:state_focused="true" >
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <solid Android:color="@color/green"/>
    <corners 
    Android:radius="7dp"/>
    </shape>
 </item>

 <item Android:state_focused="false" >
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <solid Android:color="@color/red"/>
    <corners 
    Android:radius="7dp"/>
    </shape>   
 </item>

 <item Android:state_pressed="false" >
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <solid Android:color="@color/red"/>
    <corners 
    Android:radius="7dp"
    />
    </shape>
 </item> 

</selector>
56
Bharath

私がしたことは、形状を定義し、各コーナーのdpを指定することでした。

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" Android:padding="90dp">
<solid Android:color="#FFFFFF"/>
<padding />
<corners
    Android:bottomRightRadius="15dp"
    Android:bottomLeftRadius="15dp"
    Android:topLeftRadius="15dp"
    Android:topRightRadius="15dp"/>

</shape>

各コーナーのdpを大きくすると、ボタンがより丸くなります。

2
zabawaba99

私はあなたが説明していることを正確に行うことに成功しました。私は次のことをしました:

まず、Buttonを拡張する新しいクラスを作成しました。このクラスでは、setState()というメソッドを作成しました。

public void setState (int s)
{
    if (s > 0 && s < 4 &&)
    {
        this.state = s;
        switch (state)
        {
            case 1:
                setBackgroundDrawable (def_gray);
                break;

            case 2:
                setBackgroundDrawable (lt_gray);
                break;

            case 3:
                setBackgroundDrawable (black);
        }
    }
}

上記の3つの背景ドローアブルは、ボタンの外観を説明するXMLファイルです。それらはほとんど同じですが、それぞれの色セットが異なります。デフォルトの灰色のボタンは次のように説明されています。

<?xml version="1.0" encoding="utf-8"?>

<selector
    xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item>

        <shape>

            <gradient
                Android:startColor="#333333"
                Android:endColor="#333333" />

            <stroke
                Android:width="2dp"
                Android:color="@Android:color/white" />

            <corners
                Android:radius="5dp" />

            <padding
                Android:left="2dp"
                Android:top="2dp"
                Android:right="2dp"
                Android:bottom="2dp" />

        </shape>

    </item>

</selector>

私の知る限り、そのXML形式は、ボタンの面の色のグラデーションを構成するために使用されることを期待しています。それは私が望んでいたことではなかったので、私は両方の色の値を同じに設定し、背景色は一貫しています。色の値を少し試す必要があるかもしれませんが、すでにそれを理解しているようです。

0
Rich