我使用以下布局加载首选项屏幕:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/export_main_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/windowBackground"
android:clickable="true">
<ImageView
android:id="@+id/export_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/entry_background" />
<android.support.v7.widget.RecyclerView
android:id="@+id/export_settings_list"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/export_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/ic_file_upload_white_24"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:clickable="true"/>
</RelativeLayout>
RecyclerView是XML首选项文件膨胀的列表。其余的布局,FAB和ImageView,只是自定义首选项屏幕的补充。
所有这些都适用于最新的Android版本,但在ICS和Jelly Bean(我没有尝试过Kikat)上,FloatingActionButton无法接收任何点击并变得有点透明。
我尝试了十几种不同的东西(使用标准按钮,标准的lisview等),但按钮在屏幕上仍然无用,而是始终点击下面的列表项。
我认为问题可能来自于我为XML首选项文件充气这一事实,因为我使用标准列表创建了相同的布局,并且按钮在任何版本中都运行良好。
最糟糕的情况我只会加载旧版本的特定布局......
答案 0 :(得分:1)
我实际上终于成功了。
在我的问题中,我正在添加XML中的按钮,但无法捕获点击事件。我终于改变了我的代码,并在布局中动态添加了按钮,并且它有效!
我仍然无法解释为什么在以编程方式添加按钮时可以点击,也许使用XML按钮仍然在列表下方...
无论如何这里是代码:
final ViewGroup innerContainer = (ViewGroup) exportView.findViewById(R.id.export_main_frame);
final View innerView = super.onCreateView(inflater, innerContainer, savedInstanceState);
if (innerView != null) {
innerContainer.addView(innerView);
// Add dynamically the FAB to export
FloatingActionButton dynamicExportFAB = new FloatingActionButton(getActivity());
dynamicExportFAB.setImageResource(R.drawable.ic_file_upload_white_24);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.ALIGN_PARENT_END);
dynamicExportFAB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//TODO
}
});
innerContainer.addView(dynamicExportFAB, params);
}