【问题标题】:Navigation Drawer: Action Bar color change导航抽屉:操作栏颜色变化
【发布时间】:2015-02-16 10:27:38
【问题描述】:

我有一个带有导航抽屉的活动类。当我从导航抽屉从一个片段转到另一个片段时,我想更改操作栏的颜色。 我该怎么做。

我的代码是这样的:http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/

请帮助。

【问题讨论】:

    标签: android navigation android-actionbar


    【解决方案1】:

    和我的一样,我也有一个导航抽屉。 所以在 app_bar_main.xml 布局中找到 AppBarLayout

      <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff5d7"
        android:theme="@style/AppTheme.AppBarOverlay">
    

    你可以改变它的背景。我希望这可能会有所帮助

    【讨论】:

      【解决方案2】:

      您可以使用android.support.v7.widget.Toolbar 来完成。像这样创建一个布局文件:

      <?xml version="1.0" encoding="utf-8"?>
      <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:background="#cc00ff"
          android:layout_height="?android:attr/actionBarSize" />
      

      要在您的布局中包含工具栏布局,请执行以下操作

      <include android:id="@+id/toolBar" layout="@layout/custom_toolbar" />
      

      然后对于您在displayView() 方法中返回的每个片段,您可以像这样修改它:

      @Override
          public void onActivityCreated(Bundle savedInstanceState) {
              ((ActionBarActivity) getActivity()).getSupportActionBar().setColor(Color.GREEN);
              super.onActivityCreated(savedInstanceState);
      
          }
      

      然后您的 HostActivity 即 MainActivity 您可以设置工具栏,如下所示:

      @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              Toolbar tb = (Toolbar)findViewById(R.id.toolBar); 
              setSupportActionBar(tb);
              mTitle = mDrawerTitle = getTitle();
      
              // load slide menu items
              navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
      
              // nav drawer icons from resources
              navMenuIcons = getResources()
                      .obtainTypedArray(R.array.nav_drawer_icons);
      
              mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
              mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
      
              navDrawerItems = new ArrayList<NavDrawerItem>();
      
              // adding nav drawer items to array
              // Home
              navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
              // Find People
              navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
              // Photos
              navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
              // Communities, Will add a counter here
              navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "22"));
              // Pages
              navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
              // What's hot, We  will add a counter here
              navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+"));
      
      
              // Recycle the typed array
              navMenuIcons.recycle();
      
              mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
      
              // setting the nav drawer list adapter
              adapter = new NavDrawerListAdapter(getApplicationContext(),
                      navDrawerItems);
              mDrawerList.setAdapter(adapter);
      
              // enabling action bar app icon and behaving it as toggle button
              getActionBar().setDisplayHomeAsUpEnabled(true);
              getActionBar().setHomeButtonEnabled(true);
      
              mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                      R.drawable.ic_drawer, //nav menu toggle icon
                      R.string.app_name, // nav drawer open - description for accessibility
                      R.string.app_name // nav drawer close - description for accessibility
              ) {
                  public void onDrawerClosed(View view) {
                      getActionBar().setTitle(mTitle);
                      // calling onPrepareOptionsMenu() to show action bar icons
                      invalidateOptionsMenu();
                  }
      
                  public void onDrawerOpened(View drawerView) {
                      getActionBar().setTitle(mDrawerTitle);
                      // calling onPrepareOptionsMenu() to hide action bar icons
                      invalidateOptionsMenu();
                  }
              };
              mDrawerLayout.setDrawerListener(mDrawerToggle);
      
              if (savedInstanceState == null) {
                  // on first time display view for first nav item
                  displayView(0);
              }
          }
      

      让您的 MainActivity 扩展 ActionBarActivity 而不是 Activity 并在您的 styles.xml 中修改您的主题:

      <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
              <!-- Customize your theme here. -->
          </style>
      

      希望对你有帮助!!!

      【讨论】:

      • 你能指定在哪里添加你提到的xml部分吗?
      • 我在样式'error: Error retrieving parent for item: No resource found that match the given name'Theme.AppCompat.Light.NoActionBar''中遇到了错误。
      • 还有以下错误:方法 setColor(int) is undefined for type ActionBar
      【解决方案3】:

      试试这个

      <item name="colorControlNormal">@color/colorControlNormal</item>
      

      为我工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多