Android单Activity中两个Button点击事件异常求助:点击任意按钮均触发首个点击事件
嘿,我一眼就发现问题所在了!你遇到的这个点击事件异常,核心原因是两个按钮的布局完全重叠了——不管你点击视觉上的哪个按钮,实际触发的都是堆叠在布局层级上可点击的那个science按钮的事件。
咱们来看你的XML布局代码:两个Button都设置了android:layout_alignParentBottom="true",这个属性会强制让按钮的底部和父布局的底部牢牢对齐。但你同时又加了android:layout_marginBottom,这俩属性在RelativeLayout里是冲突的——alignParentBottom会直接忽略marginBottom的偏移作用,结果就是两个按钮被硬生生堆在了同一个位置!这时候不管你点哪里,本质都是点到了science按钮,自然只会触发它的跳转逻辑。
给你两种简单的修复方案:
方案一:用RelativeLayout的层级关系正确定位
删掉两个按钮的layout_alignParentBottom,改用layout_below或者layout_above来让它们垂直排列,避免重叠:
<Button android:id="@+id/button_s" android:layout_width="258dp" android:layout_height="65dp" android:layout_centerHorizontal="true" <!-- 直接水平居中,省掉左右margin的麻烦 --> android:layout_marginBottom="20dp" <!-- 控制和下方按钮的间距 --> android:layout_above="@+id/button_a" <!-- 让science按钮在art按钮的上方 --> android:onClick="science" android:text="science" /> <Button android:id="@+id/button_a" android:layout_width="258dp" android:layout_height="65dp" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_marginBottom="328dp" android:onClick="art" android:text="art" />
方案二:改用LinearLayout垂直布局(更直观)
如果你的页面布局逻辑不复杂,换成LinearLayout会更不容易踩坑:
先把父布局改成LinearLayout,然后垂直排列控件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal" android:padding="16dp"> <!-- 你的TextView放在这里 --> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="auto" <!-- 把TextView顶到页面上方,按钮自然靠下 --> android:text="Welcome..." /> <Button android:id="@+id/button_s" android:layout_width="258dp" android:layout_height="65dp" android:layout_marginBottom="20dp" android:onClick="science" android:text="science" /> <Button android:id="@+id/button_a" android:layout_width="258dp" android:layout_height="65dp" android:layout_marginBottom="328dp" android:onClick="art" android:text="art" /> </LinearLayout>
额外小技巧
修改完布局后,你可以用Android Studio的Layout Inspector工具查看按钮的实际位置,确认它们不再重叠,这样点击事件就能各自触发对应的跳转啦!
内容的提问来源于stack exchange,提问作者samer hwishan
相关产品推荐
相关产品推荐

