如何隐藏片段的动作栏?

时间:2014-02-01 21:49:06

标签: android android-actionbar

如何隐藏某个片段的操作栏? 我在stackoverflow上搜索了答案,但我只找到了一个解决方案,其中包括禁用android清单中主要活动的操作栏。由于我需要为一个片段禁用操作栏,因此这不是一个选项。 有任何想法吗?感谢。

编辑:min API级别为7,sherlock未被使用

10 个答案:

答案 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();
}