浮动操作按钮在被点击/触摸时没有响应

16

我在我的应用程序中使用浮动操作按钮(FAB)来显示对话框,当我在安装了Lollipop 5.1.1的Xperia Z手机上测试我的应用程序时,一切都正常运行。
然而,在ASUS Zenfone 6手机上测试我的应用程序时,该FAB加载完美,但是当我尝试点击它时,似乎没有反应,对话框也没有显示出来。类似地,在安装了Jelly Bean 4.2.2的Xperia C手机上测试我的应用程序时,FAB也没有显示出对话框。
值得一提的是,我的min sdk版本为16。

我想问的是为什么会发生这种情况?我的代码有问题吗,或者是Android版本或API版本出了问题?

请查看我的代码。以下是XML代码:

    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    android:src="@drawable/ic_add_account"
    android:visibility="invisible"
    android:clickable="true"/>

这里是我声明和设置FAB监听器的方式:

FloatingActionButton fab;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

   fab = (FloatingActionButton) getActivity().findViewById(R.id.fab);

   ...
   fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialog();
            }
   });
   ...
}

让我困惑的是,它在Xperia Z上能够运行,但在ASUS Zenfone 6上却不能?


1
原来问题出在XML文件中,我先声明了FAB再声明listview,将FAB的声明放到listview之后,问题得以解决。 - Bullockta Bodax
你应该将上面的评论作为你自己问题的答案添加,因为它确实是这个问题的解决方案。在我的情况下,我遇到了同样的问题,这是由于RecyclerView、FAB和NestedScrollView引起的。将FAB移动到NestedScrollView之下就可以使触摸/点击事件正常工作。做得好。 - Bogdan Zurac
@Andrew 我希望将我的评论作为答案并在我的问题上打上已解决的标记,但我真的不知道该怎么做。太难过了... - Bullockta Bodax
我猜只需将注释文本手动复制并粘贴到“添加答案”字段中。试试看。 - Bogdan Zurac
@Andrew 天啊... 它一直在那里。 - Bullockta Bodax
3个回答

29

这里的问题在于我在声明listView之前声明了FAB。通过将FAB的声明放在listView之后,可以解决这个问题。

<android.support.design.widget.FloatingActionButton
    ...
    ...
    .../>
<ListView
    ...
    ...
    .../>

致:

<ListView
    ...
    ...
    .../>
<android.support.design.widget.FloatingActionButton
    ...
    ...
    .../>

就是这么简单。


当我使用Kotlin Synthetics(和findViewById)时,我必须将FAB放在ListView上方。但是现在由于Kotlin Synthetics已被弃用,我已经迁移到了Android ViewBinding,为了使其正常工作,我不得不将FAB移动到ListView下方。我就像,这里发生了什么。 - Kellin Strook
哥们儿,非常感谢你找到了这个问题!它对我非常有用!这个问题让我疯狂了!我找不到问题所在。但是多亏了你,现在问题已经解决了! - Burak

13

以编程方式将FAB置于前台也应该起作用:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.bringToFront();
fab.setOnClickListener... //etc

是的,它起作用了,但问题在于为什么它在 API 19 上不起作用,而在 19 以上的 API 上却起作用了? - Raed

1
只需在xml文件中的FAB(浮动操作按钮)中添加可点击和可聚焦,并将两者都设置为“true”。
<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:clickable="true"
    android:focusable="true"
    />

这使浮动按钮能够接收点击事件并可被单击。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接