5

標準の Android ToggleButton を取得して、ややカスタム スタイルを取得しようとしています。チェックされていない状態では、境界線/背景の塗りつぶしは表示されません。チェックされた状態では、背景の塗りつぶしが表示されます。ある状態から別の状態に遷移するように表示されます。

ほとんどの場合、これをトグルボタンの背景として使用しています。

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

    <item android:drawable="@drawable/ripple" android:state_pressed="true"/>
    <item android:drawable="@drawable/checked_bg" android:state_checked="true"/>
    <item android:drawable="@android:color/transparent"/>

</selector>

リップル:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight" >

    <item
        android:id="@android:id/mask">
        <color
            android:color="@android:color/white" />
    </item>

</ripple>

チェック済み背景:

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

    <solid
        android:color="?android:attr/colorControlHighlight" />

</shape>

ただし、チェックされた状態からチェックされていない状態に移行すると、波紋はチェックされたボタンの状態の塗りつぶしの色と一致しない単色の塗りつぶしをボタンに適用するため、ある色から次の色にすぐに「ジャンプ」するように見えます。これは、チェックされた状態の背景の塗りつぶしと波紋の色の両方に colorControlHighlight を使用しているためだと思われます。そのため、波紋はその色で終わり、別の少し明るい色で始まります...

ただし、チェックした状態の背景の塗りつぶしをこの明るい色に単純に変更することはできません。これは、ボタンをチェック/オンにしたときに奇妙に見えるケースになるためです。チェックされた背景の塗りつぶしに一致する明るい色で開始されます。暗い色になり、すぐに明るい色に戻ります。

これを処理するきれいな方法はありますか?それとも、一方の端で色の変化が急激に進んでいますか?

あるいは、2 つの異なる波紋を使用することもできます。1 つは、pressed = true および checked = false 用で、もう 1 つは、pressed = true および checked = true の場合ですよね?

4

0 に答える 0