在片段中移除ActionBar

4

我有一些困难,试图在特定的片段中删除一个工具栏,我在onCreateView碎片方法中有以下代码:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_login,container,false);
    mValidator = new Validator(this);
    mValidator.setValidationListener(this);
    mFbHelper = new 
    mGHelper = new GoogleHelper(this, null, this);

    ((DrawerUtil) getActivity()).setDrawerLocked(true);
    ((AppCompatActivity) getActivity()).getSupportActionBar().hide();
    initViews(view);
    return view;
}

我可以隐藏ActionBar,但是我的想法是为了更好地使用标志而删除ActionBar。我正在使用以下代码:((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(state); 但它不起作用。有什么想法吗?

是的,但只在特定的片段中。 - Johan Sánchez
请检查我的修改后的答案。 - Rajesh Gosemath
7个回答

4

试试这样做

private HomeActivity csActivity;

并且

csActivity      = (HomeActivity)getActivity();
csActivity.getSupportActionBar().hide();

实际上我可以隐藏ActionBar,想法是从特定的片段中删除它。 - Johan Sánchez
两者有何不同? - Anil
移除一个,你可以添加其他自定义。 - Acauã Pitta

4

对于特定的片段,您可以使用:

override fun onStart() {
        super.onStart()
        (activity as AppCompatActivity).supportActionBar!!.hide()
    }

    override fun onStop() {
        super.onStop()
        (activity as AppCompatActivity).supportActionBar!!.show()
    }


    override fun onResume() {
        super.onResume()
        (activity as AppCompatActivity).supportActionBar!!.hide()
    }

2
最佳答案。这将显示和隐藏特定 Fragment 的操作栏。 - wenus

1
对于您的登录活动,请使用以下代码:

<style name="BaseTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
   <item name="windowNoTitle">true</item>
   <item name="windowActionBar">false</item>
</style>

这将删除Android提供的默认ActionBar。因此,请将您的片段附加到此活动中,您的片段中也不会有操作栏。
对于其他活动,如果您需要ActionBar,则可以使用相同的主题并将工具栏添加为操作栏。
如果您不想使用ActionBar,请使用主题。
parent="@style/Theme.AppCompat.Light.NoActionBar"

如果你想使用 ActionBar,请使用主题。
parent="@style/Theme.AppCompat.Light.DarkActionBar" or

parent="@style/Theme.AppCompat.Dark.LightActionBar"

如果您使用浅色或深色ActionBar主题,您将获得默认的ActionBar。如果您想隐藏它,可以这样做。
getActivity().getSupportActionBar().hide();    // in Fragment

getSupportActionBar().hide();                  // in Activity 

1
对于Kotlin,使用


import android.support.v7.app.AppCompatActivity

尝试

 override fun onStart() {
        super.onStart()
        //hide action bar from splash screen
        (activity as AppCompatActivity).supportActionBar!!.hide()
 }

在特定的片段中(s,和


            supportActionBar!!.hide()

在Activity/Activities中。

注意:当您希望ActionBar再次可见时,请不要忘记将“hide()”替换为“show()”。


0

你可以从XML文件中删除它,检查你的Activity代码,在那里加载Fragment并对其进行更改,如果这个Fragment被加载,那么将Toolbar的可见性设置为Gone。


我没有在fragment_login.xml中调用getSupportActionBar。 - Johan Sánchez
请发布您的活动代码,从中加载片段。 - Vishal Vaishnav
不需要,你想在所有片段中做吗?还是只在一个片段中做? - jigar savaliya
只有一个 @jigar savaliya - Johan Sánchez
只有一个 @jigar savaliya - Johan Sánchez
请提供您加载片段的活动,如果您不理解,请参见编辑。 - jigar savaliya

0

可能有点晚了,但这可能会为下一个 OP 节省一些搜索时间。这是对我有效的 @Johan Sanchez 的方法。假设您在清单中声明了主题为 NoActionBar,但仍有一个空白处,那么很可能是您的 XML 文件...

在我的 main_activity.xml 文件中,有一个片段占位符,将被相应的片段 XML 文件替换...里面有一个 layout_margintop 属性。删除它。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="simiyu.com.smallheaven.MainActivity">
<FrameLayout
    android:id="@+id/flContent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="?attr/actionBarSize"/>

</android.support.design.widget.CoordinatorLayout>

结果应该是这样的

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="simiyu.com.smallheaven.MainActivity">
<FrameLayout
    android:id="@+id/flContent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="?attr/actionBarSize"/>

</android.support.design.widget.CoordinatorLayout>
enter code here

0
在编程中,一种活动是加载您的片段,在Java文件中尝试下面的代码;
 ActionBar actionBar = getSupportActionBar();
 actionBar.hide();

并从Menifest .xml中删除以下行

 android:theme="@style/AppTheme.NoActionBar"

不,实际上我在清单文件中有这个NoActionBar,并且它也是一个片段。 - Johan Sánchez
我改变了我的答案.. 试试看。 - Vishal Vaishnav
我认为这个问题在于,如果你有多个片段,它也不会显示给所有这些片段。 - Cyd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接