我在我的应用程序中使用浮动操作按钮(FAB)来显示Dialogs,当我使用Lopllipop 5.1.1在Xperia Z中测试我的应用程序时,一切都运行正常。
然而,问题是在使用KitKat 4.4.2的ASUS Zenfone 6和使用Jelly Bean 4.2.2的Xperia C中测试我的应用程序时,FAB加载完美但FAB没有显示Dialogs,看起来它没有响应当我触动它。
为了记录,我的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中是如何工作的,但它在华硕Zenfone 6中无效?
答案 0 :(得分:21)
这里的问题是我在listView声明之前声明了FAB。不知何故,通过在listView声明之后重新定位FAB的声明,它将解决问题 从:
<android.support.design.widget.FloatingActionButton
...
...
.../>
<ListView
...
...
.../>
致:
<ListView
...
...
.../>
<android.support.design.widget.FloatingActionButton
...
...
.../>
就像那样简单。
答案 1 :(得分:8)
以编程方式将FAB置于前方也应该有效:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.bringToFront();
fab.setOnClickListener... //etc
答案 2 :(得分:0)
只需在 xml 文件中的 FAB(浮动操作按钮)中添加可点击和可聚焦并将两者都设置为“true”
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:clickable="true"
android:focusable="true"
/>
这使浮动按钮能够接收点击事件并使其可点击