To bardzo późno „ja też”, ale po dojściu do tego i inne pytania szuka rozwiązania, znalazłem prosty, elegancki rozwiązanie własne.
Kolejny question skarżył się, że przezroczyste tło ich obrazu nie było klikalne. Jeśli to jest problem, wydaje się, że również to obejdzie.
Oto przycisk:
<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" />
Odpowiednie linie są ostatnie dwa. "@drawable/arrow_up"
jest kilka stanów przycisków w plikach * .png określonych w rozciągliwej * .xml plik tak:
<?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>
Po prostu podstawowy przycisk. Nic specjalnego. I "@drawable/clear_button_background"
jest właśnie to:
<?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>
wysokość i szerokość są tu obszar klikalny, zmiana rozmiaru w razie potrzeby. Możesz użyć go ponownie na tyle przycisków, ile potrzebujesz w jednym widoku, w przeciwieństwie do absurdalnie szczegółowych TouchDelegate. Brak dodatkowych słuchaczy. Nie dodaje żadnych widoków ani grup do twojej hierarchii i nie będziesz się bawić z dopełnieniem i marginesami przez cały dzień.
Proste. Elegancki.
To działa tylko sortof. Aby było w pełni funkcjonalne, musisz ustawić przycisk setClickable (false). W przeciwnym razie kliknięcie samego bota nie będzie podświetlane, ponieważ otrzyma swój stan od rodzica, który nie zostanie kliknięty w tym miejscu. Po kliknięciu przycisku nie można kliknąć, nie trzeba ustawiać na nim obiektu nasłuchującego onClick. –