Here is what I came up with.

I used a TextView with a layer-list background. The background is the size of the loaded image, so in order to have a circle, you can force the TextView have the same width and height.
<TextView android:id="@+id/view" android:layout_width="65dp" android:layout_height="65dp" android:gravity="center" android:textSize="40dp" android:fontFamily="sans-serif-thin" android:background="@drawable/background" android:text="A"/>
I have hard text, size, width and height, but you can control them at runtime. fontFamily="sans-serif-thin" allows you to use, if possible, a thin font that can be better. List of layers:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="1dp"> <shape android:shape="oval" > <solid android:color="#321a1a1a"/> </shape> </item> <item android:top="1dp" android:bottom="1dp" android:left="1dp" android:right="1dp"> <shape android:shape="oval" > <solid android:color="@color/red_700"/> </shape> </item> </layer-list>
The first element is to display a fake shadow, but you can get rid of it. Alternatively, you can remove its offset android:top="1dp" . Thus, you will have a 1dp circular ring on the outside (while now the shadow fills only at the bottom and on both sides).
Again, I have hardcoded colors, but you can change what you want.
source share