Это слишком поздно "я тоже", но после того, как я пришел к этому и другим вопросам в поисках решения, я нашел простое, элегантное решение самостоятельно.
Другой вопрос жаловался, что на прозрачном фоне их изображения нельзя было нажать. Если это проблема, то, похоже, это тоже обойдется.
Вот кнопка:
<ImageButton
android:id="@+id/arrowUp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/arrow_up"
android:background="@drawable/clear_button_background" />
Соответствующие строки - последние две. "@drawable/arrow_up"
- это несколько состояний кнопок в * .png файлах, определенных в отрисовываемом * .xml файле, например:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true"
android:drawable="@drawable/tri_up_blue" /> <!-- pressed -->
<item android:state_selected="true"
android:drawable="@drawable/tri_up_blue" /> <!-- selected -->
<item android:state_focused="true"
android:drawable="@drawable/tri_up_blue" /> <!-- focused -->
<item android:drawable="@drawable/tri_up_green" /> <!-- default -->
</selector>
Просто ваша основная кнопка. Ничего особенного. И "@drawable/clear_button_background"
это просто:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
<size android:width="20dp" android:height="30dp" />
</shape>
Высота и ширина здесь - это кликабельная область, изменяемая по мере необходимости. Вы можете использовать это для любого количества кнопок в одном представлении, в отличие от нелепо детализированного TouchDelegate. Никаких дополнительных слушателей. Он не добавляет никаких представлений или групп в вашу иерархию, и вы не будете возиться с отступами и полями весь день.
Simple. Элегантный.