如何隐藏某个片段的操作栏? 我在stackoverflow上搜索了答案,但我只找到了一个解决方案,其中包括禁用android清单中主要活动的操作栏。由于我需要为一个片段禁用操作栏,因此这不是一个选项。 有任何想法吗?感谢。
编辑:min API级别为7,sherlock未被使用
答案 0 :(得分:44)
如果您正在使用AppCompatActivity(您应该),那么这是适用于我的解决方案:
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
您可以在onCreate()中添加它。支持片段的getActivity()返回FragmentActivity,这不包含getSupportActionBar()方法。如果你有AppCompatActivity,只使用getActionBar()会给出空指针异常。
答案 1 :(得分:8)
getActionBar().hide()
或getSupportActionBar().hide()
(如果使用ActionBarCompat v7 lib)。
此致
答案 2 :(得分:7)
在getSupportActionBar().hide()
之前将setContentView
放在包含片段的活动中。
在膨胀布局之前,还要在片段中添加:((AppCompatActivity) getActivity()).getSupportActionBar().hide()
。如果您使用此ActionBarActivity
,则此功能有效。它还会在隐藏操作栏中删除延迟
答案 3 :(得分:5)
在必需的片段中隐藏actionBar。
getActivity().getSupportActionBar().hide();
在下一个片段中显示actionBar。
getActivity().getActionBar().show();
答案 4 :(得分:5)
您可以简单地将它放入Fragment类的createView方法中: -
View layout = inflater.inflate(R.layout.player_fragment, container, false);
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
答案 5 :(得分:4)
如前所述,可以通过(requireActivity() as 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
的调用更早。分段。因此,下一个片段将无法“覆盖”当前片段的onStop
中应用的动作可见性。
答案 6 :(得分:1)
您是否尝试过隐藏ActionBar的片段的getActivity().getSupportActionBar().hide()
中的onCreate()
?
我假设你没有使用ActionBarSherlock
。
答案 7 :(得分:1)
在将布局膨胀到 SHOW Action Bar ` 之前将代码粘贴到片段中 //Kotlin 语句
(activity as AppCompatActivity?)!!.supportActionBar!!.show()
在膨胀布局之前将代码粘贴到片段中以隐藏操作栏` //Kotlin 语句
(activity as AppCompatActivity?)!!.supportActionBar!!.hide()
这对我来说很好用。
答案 8 :(得分:0)
此解决方案适用于复杂的非AppCompat应用程序,这些应用程序在开始运行Lollipop时使用本机 ToolBar ,否则运行本机 ActionBar 。
它假定您希望在可见片段时隐藏ActionBar。
在每个活动中在 onCreate()内部:
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener()
{
@Override
public void onBackStackChanged() {
U.ABkk(this, getFragmentManager().getBackStackEntryCount());
}
}
);
或(更好)在实现Application.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()是一种解决方案,无需对您的片段或活动进行任何更改!
答案 9 :(得分:0)
将此代码放在要隐藏工具栏的片段中...
@Override
public void onResume() {
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@Override
public void onStop() {
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
}