簡體   English   中英

單擊無邊界按鈕時如何為背景設置特定顏色?

[英]How to set specific color for background when being clicked on borderless button?

簡短問題:

假設我在按鈕上使用以下樣式:

    <Button
        style="@style/Widget.AppCompat.Button.Borderless.Colored" ...

(或沒有“彩色”部分)。

如何將其背景設置為被按下時具有不同顏色的選擇器? 默認的棒棒糖上的顏色是粗體...

除了選擇器的顏色,我希望所有樣式都作為默認樣式(包括填充)。

我認為最簡單的方法是創建一個典型的多狀態可繪制對象,並復制Android的默認按鈕可繪制屬性進行填充等。

從Android SDK AppCompat主題中:

<!-- Colored bordered ink button -->
    <style name="Base.Widget.AppCompat.Button.Colored">
        <item name="android:background">@drawable/abc_btn_colored_material</item>
        <item name="android:textAppearance">@style/TextAppearance.AppCompat.Widget.Button.Inverse</item>
    </style>

他們使用可繪制的abc_btn_colored_material,其來源如下: https : //github.com/dandar3/android-support-v7-appcompat/blob/master/res/drawable/abc_btn_borderless_material.xml

您可以看到它只是具有以下多狀態可繪制對象的圖層列表:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/abc_btn_default_mtrl_shape"/>
    <item android:state_pressed="true" android:drawable="@drawable/abc_btn_default_mtrl_shape"/>
    <item android:drawable="@android:color/transparent"/>
</selector>

https://github.com/dandar3/android-support-v7-appcompat/blob/master/res/drawable/abc_btn_default_mtrl_shape.xml

<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:insetLeft="@dimen/abc_button_inset_horizontal_material"
       android:insetTop="@dimen/abc_button_inset_vertical_material"
       android:insetRight="@dimen/abc_button_inset_horizontal_material"
       android:insetBottom="@dimen/abc_button_inset_vertical_material">
    <shape android:shape="rectangle">
        <corners android:radius="@dimen/abc_control_corner_material" />
        <solid android:color="@android:color/white" />
        <padding android:left="@dimen/abc_button_padding_horizontal_material"
                 android:top="@dimen/abc_button_padding_vertical_material"
                 android:right="@dimen/abc_button_padding_horizontal_material"
                 android:bottom="@dimen/abc_button_padding_vertical_material" />
    </shape>
</inset>

因此,只需將其設為您的:)將可繪制的xml復制到您的應用中並對其進行自定義。

我不知道你是否將能夠訪問@dimen/...從SDK包以外,這些值在SDK中定義Values.xml ,看看https://github.com/dandar3/ android-support-v7-appcompat / blob / master / res / values / values.xml 如果這是不可能的,只是在你創建你自己的夢詩的版本values.xml

如果有更清潔的解決方案,任何Android大師都可以指出,我將很高興知道!

要求的更新

另一個技巧是將ColorFilter應用於整個Button視圖。 這是一件非常簡單的事情,但不適用於所有情況,因為濾色器會盲目地改變整個視圖(包括字體顏色,邊框等)。 但是,明智地選擇顏色上的Alpha可能適用於特定情況。

我建議使用LightningColorFilter 要將濾色鏡應用於“按鈕”或任何視圖,您可以執行以下操作

myButton.getBackground().setColorFilter(new LightingColorFilter(Color.WHITE, Color.RED));

在這里查看每種顏色的含義: http : //developer.android.com/reference/android/graphics/LightingColorFilter.html

暫無
暫無

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

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