【问题标题】:How to get the Action Bar to display an icon and no title in both states of Navigation drawer?如何让操作栏在导航抽屉的两种状态下都显示图标而不显示标题?
【发布时间】:2015-01-31 10:20:09
【问题描述】:

我试图让我的操作栏在导航抽屉的两种状态(打开和关闭)时显示一个图标而不显示任何标题 我阅读了developers android 上的文档,了解如何在抽屉可见时修改操作栏的内容。正如页面所说,我创建了ActionBarDrawerToggle 的实例并将图标和标题设置为空。但是我仍然看不到任何图标,并且只要我拉出导航抽屉,就会出现应用程序标题。以下是我在活动onCreate中使用的代码

 mToggle = new ActionBarDrawerToggle(
            this,
            drawerLayout,
            R.string.drawer_open_or_close,
            R.string.drawer_open_or_close) {

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            getActionBar().setTitle(R.string.drawer_open_or_close);
            getActionBar().setIcon(R.drawable.icon_144);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            getActionBar().setTitle(R.string.drawer_open_or_close);
            getActionBar().setIcon(R.drawable.icon_144);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
    };

如您所见,在完全打开和完全关闭状态下,我都将操作栏标题设置为R.string.drawer_open_or_close,这是一个空字符串。我在这两种情况下都设置了应用程序图标。我在这里错过了什么?

编辑:我忘记将抽屉切换设置为DrawerListener,我做了

drawerLayout.setDrawerListener(mToggle);

现在,当我打开导航抽屉时,应用程序强制关闭并且日志猫说 java.lang.NullPointerException@在

getActionBar().setTitle(R.string.drawer_open_or_close);

编辑 2:我想我们不能给出一个空字符串作为标题

LogCat:

01-31 16:01:45.335  13944-13944/com.example.android.effectivenavigation E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.example.android.handsfree.MainPage$1.onDrawerOpened(MainPage.java:79)
            at android.support.v4.widget.DrawerLayout.dispatchOnDrawerOpened(DrawerLayout.java:656)
            at android.support.v4.widget.DrawerLayout.updateDrawerState(DrawerLayout.java:616)
            at android.support.v4.widget.DrawerLayout$ViewDragCallback.onViewDragStateChanged(DrawerLayout.java:1627)
            at android.support.v4.widget.ViewDragHelper.setDragState(ViewDragHelper.java:873)
            at android.support.v4.widget.ViewDragHelper$2.run(ViewDragHelper.java:335)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5162)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:756)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:572)
            at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
            at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 请显示日志跟踪
  • 查看日志跟踪编辑
  • 你使用的是什么活动类和主题?
  • 活动主题是android:theme="@style/Theme.AppCompat.Light" > 活动课是什么意思?我的活动扩展了ActionBarActivity

标签: android android-fragments android-actionbar navigation-drawer android-actionbaractivity


【解决方案1】:

我不知道这是否是最好的方法,但我最终使用了自定义工具栏,然后直接使用 findViewById() 操作图标和标题。我使用一个通用工具栏,我在每个活动布局中都包含该工具栏。

    <ImageView
        android:id="@+id/toolbarLogo"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center" 
        android:src="@drawable/logo"
        android:adjustViewBounds="true"
        android:padding="2dp"
        android:visibility="gone"
        />
    <TextView 
        android:id="@+id/toolbarTitle"
        android:textAppearance="@android:style/TextAppearance.Theme"
        android:textColor="@color/titleTextColor"
        android:textSize="18sp"  
        android:textStyle="bold"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"  
        android:singleLine="true"  
        />
</android.support.v7.widget.Toolbar>

然后我设置我需要的:

    // Set the custom toolbar
    android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
    if (toolbar != null) {
        setSupportActionBar(toolbar);
        toolbar.setTitle("");
    }

    TextView title = (TextView) findViewById(R.id.toolbarTitle);
    title.setText(getString(R.string.app_long_name));
    title.setTextColor(getResources().getColor(R.color.colorPrimary));

希望能给你一些想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多