#android #onclick #imagebutton
#Android #onclick #imagebutton
Вопрос:
У меня есть ImageButton в моем представлении, который не работает (метод не вызывается), когда я пытаюсь нажать на него, но он работает, если я нажимаю с помощью клавиатуры эмулятора. adb shell logcat ничего не печатает.
мой main.xml макет:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:id="@ id/btn"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
>
<ImageButton
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/ic_btn"
android:clickable="true"
android:onClick="click"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Text" />
</LinearLayout>
</merge>
метод click в activity:
public void click(View view) {
tv.setText("clicked");
}
И если я помещу ImageButton в качестве прямого дочернего элемента <merge>
, метод click будет работать. Моя цель сборки — Android 2.2.
Итак, что же здесь не так?
ОБНОВИТЬ Я просто знаю, что это потому, что у меня есть анимация на кнопке, и местоположение кнопки не обновляется после окончания анимации. Я не включал это ранее, потому что не знал, связано ли это.
Комментарии:
1. Почему у вас есть элемент слияния, окружающий макет? Если я разведаю, слияние используется только тогда, когда у вас нет ViewGroup, например, только ImageButton. Попробуйте использовать linearlayout в качестве родительского элемента.
2. @hwa-позвонил, потому что я хотел использовать FrameLayout и, согласно ресурсу Android dev, здесь я должен использовать
<merge>
, и у меня на самом деле есть несколько элементов LinearLayout в этом представлении, я просто не показывал это.3. Ait. я использую слияние только тогда, когда мне нужно <включить> макет без родительской ViewGroup.