Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何隐藏片段的操作栏?_Android_Android Actionbar - Fatal编程技术网

Android 如何隐藏片段的操作栏?

Android 如何隐藏片段的操作栏?,android,android-actionbar,Android,Android Actionbar,如何隐藏特定片段的操作栏? 我在stackoverflow上搜索了答案,但我只找到了一个解决方案,其中包括禁用android清单中主要活动的操作栏。因为我需要为一个片段禁用操作栏,所以这不是一个选项。 有什么想法吗?谢谢 编辑:最小API级别为7,未使用sherlock您是否尝试过将ActionBar隐藏在片段的onCreate()中的getActivity().getSupportActionBar().hide() 我假设您没有使用ActionBar SherlockgetActionBar

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


编辑:最小API级别为7,未使用sherlock

您是否尝试过将ActionBar隐藏在片段的
onCreate()
中的
getActivity().getSupportActionBar().hide()

我假设您没有使用ActionBar Sherlock

getActionBar().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()操作栏后消失,但仍创建了一个空白!!即使我面临同样的问题。操作栏消失,但创建了黑色空间这对我来说很有效