ImageButton из метода onClick дочернего макета не работает

#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.