Ripples with border for a TextView?
Asked Answered
G

1

10

I have few TextViews that are displayed beside each other. Currently, I use android:background="?attr/selectableItemBackground" to get the ripple on touch.

Now, I would like to add borders to the TextViews when they are not pressed and have the ripple when the TextView is touched. How do I do that?

Gormless answered 3/3, 2016 at 15:4 Comment(0)
G
20

Based on a Styling Android blog post:

Another way that we can confine the bounds of a ripple animation is to actually define a shape drawable as a child

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />
            <stroke
                android:color="@color/card_set_bg_color"
                android:width="1dp" />
        </shape>
    </item>
</ripple>  

Here the <solid> in <shape> is needed for the ripple to render. If set to transparent or omitted, the ripple doesn't render. The ripple needs a solid background to render on. TextViews don't have a background color so we need to specify a <solid>.

Gormless answered 3/3, 2016 at 15:46 Comment(1)
Very genius solution, and +1 for answer from the questioner.Baudin

© 2022 - 2024 — McMap. All rights reserved.