簡體   English   中英

如何僅切換按鈕的背景並保存 state(是否按下)

[英]How to toggle only the background of a button and save the state (pressed or not)

我正在嘗試制作一個調查應用程序,了解一下 FragmentContainerView 和導航圖。 當我使用現有的小部件(例如單選按鈕或復選框)作為答案時,一切都很完美。

當我嘗試制作自己的小部件或更改普通按鈕的行為以使其行為如以下屏幕截圖所示時出現問題:

在此處輸入圖像描述

該行為類似於 ToggleButton 但我不想更改文本(開/關文本)。 我需要的是,當我單擊按鈕時,它被標記為選中(更改背景),當然,我需要能夠稍后詢問按鈕是否被選中。

使用按鈕和自定義選擇器,將按鈕設置為可檢查,我可以實現預期的行為。

選擇器( btn_toggle_background.xml ):

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

    <!--When Button is not enabled -->
    <item android:state_checked="false" android:color="#eeeeee" />
    <!--When Button is in pressed state -->
    <item android:state_checked="true" android:color="@color/blue_electric" />
    <!--When Button is in selected state -->
    <!--Default Background Color -->
    <item android:color="#eeeeee" />

</selector>

而在 XML 布局中:

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

 <Button
      android:id="@+id/button2"
      android:layout_width="match_parent"
      android:layout_height="60dp"
      android:backgroundTint="@drawable/btn_toggle_background" <!-- CUSTOM SELECTOR -->
      android:textColor="@drawable/btn_toggle_text" <!-- CUSTOM SELECTOR -->
      android:checkable="true" <!-- CHECKABLE HERE -->
      android:gravity="fill|fill_horizontal"
      android:text="A través de mi compañía de seguros"
      android:textAlignment="gravity"
      android:textAllCaps="false"
      app:icon="@android:drawable/btn_radio"
      app:iconTint="@drawable/btn_toggle_icon" <!-- CUSTOM SELECTOR --> />

但隨后該按鈕不再響應 OnClick 事件(我懷疑它是為了使其可檢查)。 我假設它會響應 OnCheckedChange 事件,但它是一個不會觸發普通按鈕的事件。

我還嘗試從 Button 擴展自定義視圖並攔截 OnClick 並通過自定義偵聽器(接口)發送事件。 在這種情況下,按鈕行為不再起作用。 它變成一個普通按鈕並忽略 styles 和 XML 中為選中的 state 指定的選擇器。

是否有一個看起來像我需要的小部件? 從 ToggleButton 擴展會更合適嗎?

您可以使用:

        <com.google.android.material.button.MaterialButton
            android:checkable="true"
            app:backgroundTint="@drawable/btn_toggle_background"
            .../>

和:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:color="#eeeeee" />
    <item android:state_checked="true" android:color="@color/...." android:alpha="xxx" />
</selector>

OnCheckedChangeListener

    button.addOnCheckedChangeListener { button, isChecked ->
        if (isChecked){
            //
        }
    }

使用方法isChecked了解狀態:

button.isChecked

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM