Android 如何隐藏片段的操作栏?
如何隐藏特定片段的操作栏? 我在stackoverflow上搜索了答案,但我只找到了一个解决方案,其中包括禁用android清单中主要活动的操作栏。因为我需要为一个片段禁用操作栏,所以这不是一个选项。 有什么想法吗?谢谢Android 如何隐藏片段的操作栏?,android,android-actionbar,Android,Android Actionbar,如何隐藏特定片段的操作栏? 我在stackoverflow上搜索了答案,但我只找到了一个解决方案,其中包括禁用android清单中主要活动的操作栏。因为我需要为一个片段禁用操作栏,所以这不是一个选项。 有什么想法吗?谢谢 编辑:最小API级别为7,未使用sherlock您是否尝试过将ActionBar隐藏在片段的onCreate()中的getActivity().getSupportActionBar().hide() 我假设您没有使用ActionBar SherlockgetActionBar
编辑:最小API级别为7,未使用sherlock您是否尝试过将ActionBar隐藏在片段的
onCreate()
中的getActivity().getSupportActionBar().hide()
我假设您没有使用ActionBar SherlockgetActionBar().hide()
或getSupportActionBar().hide()
(如果使用ActionBarCompat v7 lib)。
在所需片段中使用此选项隐藏操作栏
getActivity().getSupportActionBar().hide();
getActivity().getActionBar().show();
并在下一个片段中显示actionBar
getActivity().getSupportActionBar().hide();
getActivity().getActionBar().show();
如果您使用的是AppCompatActivity(您应该这样做),那么这就是适合我的解决方案:
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
您可以将其添加到onCreate()中。支持片段的getActivity()返回FragmentActivity,其中不包含getSupportActionBar()方法。如果您有AppCompatActivity,则使用just getActionBar()会产生空指针异常 在保存片段的活动中,将
getSupportActionBar().hide()
放在setContentView
之前
在展开布局之前,还要在片段中添加以下内容:
((AppCompatActivity)getActivity()).getSupportActionBar().hide()
。如果您正在使用此ActionBarActivity
,则此功能有效。它还可以删除隐藏操作栏中的我的滞后时间。您只需将其放入片段类createView方法中即可:-
View layout = inflater.inflate(R.layout.player_fragment, container, false);
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
此解决方案适用于复杂的非AppCompat应用程序,这些应用程序在运行棒棒糖之后使用本机工具栏,否则使用本机操作栏 它假定只要片段可见,就要隐藏ActionBar 在每个活动中的onCreate()内:
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener()
{
@Override
public void onBackStackChanged() {
U.ABkk(this, getFragmentManager().getBackStackEntryCount());
}
}
);
或者(更好)在实现应用程序的“singleton”类中。ActivityLifecycleCallbacks
@Override
public void onActivityCreated(final Activity A, Bundle savedInstanceState) {
A.getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
U.ABkk(A, A.getFragmentManager().getBackStackEntryCount());
}
});
}
在实用程序类中:
/** Show/hide ActionBar for KitKat devices */
public static void ABkk(Activity A, int count) {
if (lollipop()) return; // No problem when using Toolbar
ActionBar ab = A.getActionBar();
if (ab==null) return;
if (count==1) { ab.hide(); }
if (count==0) { ab.show(); }
}
/** Return true if API 21 or greater */
private static boolean lollipop() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
}
使用onActivityCreated()是一种解决方案,它不需要对片段或活动进行任何更改 将此代码放入要隐藏工具栏的片段中
@Override
public void onResume() {
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@Override
public void onStop() {
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
}
如前所述,actionbar可能被
(requireActivity()作为AppCompatActivity)隐藏。supportActionBar?.hide()
调用。
如果希望在某些片段中显示它,并在其他片段中隐藏它,则可以方便地在基本片段的onViewCreated
中应用默认(针对您的情况)可见性:
abstract class BaseFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(requireActivity() as AppCompatActivity).supportActionBar?.show()
}
}
并将其隐藏在特定的片段中:
class HiddenActionBarFragment : BaseFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(requireActivity() as AppCompatActivity).supportActionBar?.hide()
}
}
此解决方案比使用
onStart
-onStop
进行可见性更改更灵活,因为在转换过程中,不同片段的onStart
将在当前片段的onStop
之前被调用。因此,下一个片段将无法“覆盖”当前片段顶部的中应用的actionar可见性。将代码粘贴到片段中,然后将布局膨胀到显示操作栏`
getActivity().getSupportActionBar().hide();
getActivity().getActionBar().show();
//科特林声明
(activity as AppCompatActivity?)!!.supportActionBar!!.show()
(activity as AppCompatActivity?)!!.supportActionBar!!.hide()
将代码粘贴到片段中,然后将布局膨胀到隐藏操作栏`
//科特林声明
(activity as AppCompatActivity?)!!.supportActionBar!!.show()
(activity as AppCompatActivity?)!!.supportActionBar!!.hide()
这对我来说很好。你能发布主要活动和其他活动的代码吗?我假设,如果你必须更改操作栏,你可能需要一个活动或一个对话框,而不是一个片段如果你使用导航组件
请参阅使用android.support.v7.app.ActionBar
获取错误(无法解析方法)但getActivity().getActionBar().hide();在使用.hide()操作栏后消失,但仍创建了一个空白!!即使我面临同样的问题。操作栏消失,但创建了黑色空间这对我来说很有效