19

選択時にボタンの色を変更するとともに、アンドロイドのボタンに丸みを帯びた角を設定したい。私は次のことをやっています。

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"

次に、丸みを帯びた角は機能していますが、選択時のボタンの色の変更は機能していません

これを実装する方法は?

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

4

3 に答える 3

61

いくつかの試行錯誤の試みで、私の質問に対する答えを見つけました。

これが解決策です。

<?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>
于 2012-09-16T11:31:04.937 に答える
2

私がしたことは、形状を定義し、各コーナーの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を大きくすると、ボタンがより丸くなります。

于 2012-09-14T15:49:06.280 に答える
0

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

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

于 2012-09-14T16:41:57.773 に答える