我正在使用安卓的原生ActionBar (而不是夏洛克)作为一个项目。我有一个FragmentActivity和三个片段:其中两个是ListFragments,另一个是一个片段。
在我最初的“主页”片段中,我在我的应用程序的ActionBar中设置了一个自定义视图(一个旋转器),并在我的主页片段的onActivityCreated()中设置了这个视图:
ActionBar actionBar = getActivity().getActionBar();
actionBar.setCustomView(R.layout.homepage_spinner);
Spinner spinner = (Spinner) actionBar.getCustomView().findViewById(R.id.homepage_selection_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
R.array.homepage_selection_spinner_text,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(mSpinnerListener.getCurrentPosition());
spinner.setOnItemSelectedListener(mSpinnerListener);然后在onStart()中:
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(false);
setHasOptionsMenu(true);主页片段中的所有内容都运行得很好。一点问题都没有。当我切换到我的下一个片段时,我使用它试图摆脱自定义视图(spinner),并在onStart()中显示up按钮、home和我的应用程序的标题:
getActivity().getActionBar().setDisplayShowCustomEnabled(false);
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);
setHasOptionsMenu(true);当我开始看这个片段的时候,它显示了主页,向上按钮,但没有显示标题。然后,当我进入应用程序的最后一个片段,同样的结果。但是当我在这些片段上旋转手机的时候,它就像我希望的那样显示了标题。我知道这是因为活动正在被重新创建,所以当我旋转手机时,actionbar的自定义视图被擦除。我已经在运行getActionBar().getCustomView()的测试中确认了这一点,并在它为null和not时进行了检查。
备注:
发布于 2013-05-26 02:10:18
在做了更多的测试和观察了Android在不同的ActionBar场景下的行为之后,我找到了一个可行的解决方案。有点讨厌,但这是我找到的唯一可行的方法。实际上与定制视图无关..。
Android似乎将ActionBar建立在创建活动时设置的片段上。让我用一个例子来解释:假设我们有一个活动和两个片段。片段"A“设置了以下选项:
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM);片段"B“设置了以下选项:
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);当应用程序第一次启动,片段A出现时,没有标题。这很好,因为我没有包含片段A的ActionBar.DISPLAY_SHOW_TITLE。当我转到片段B时,它也没有显示标题。这就是整个问题所在。片段B说要显示标题,但它不是。
但如果你旋转手机时,碎片B是集中,标题出现。回到片段A,然后回到片段B,标题仍然出现。奇怪..。
如果你旋转手机时,碎片B是集中,标题显示。回到片段A,然后回到片段B,标题仍然出现。所以一切都很好,回到片段A,旋转手机,我们回到原来的问题,就像应用程序第一次启动一样。因此,似乎遵循了在创建活动时将焦点放在ActionBar上的“规则”。
这是我的解决方案。就像我想的那样:
在A段:
getActivity().getActionBar().setTitle("");
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_TITLE);然后在B段中:
getActivity().getActionBar().setTitle(R.string.app_name);
getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);发布于 2013-05-24 14:53:26
你试过getActionBar().getCustomView().setVisibility(View.GONE);了吗?此时自定义视图为null,现在将其设置为null。:)
您的自定义视图将不可见,也不能接收触摸事件。
发布于 2014-09-15 07:08:21
您可以通过以下方式获得标题和主页图标
getActivity().getActionBar().setTitle("Title");
getActivity().getActionBar().setDisplayShowHomeEnabled(true);
getActivity().getActionBar().setDisplayShowTitleEnabled(true);
getActivity().getActionBar().setDisplayShowCustomEnabled(false);https://stackoverflow.com/questions/16736686
复制相似问题