【问题标题】:Custom logo in ActionBar alongside drawer toggleActionBar 中的自定义徽标与抽屉切换
【发布时间】:2015-04-27 15:34:13
【问题描述】:

无论我如何尝试,我似乎都无法将徽标添加到 ActionBar。

这是我的 onCreate 方法:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.feedview);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    title = drawerTitle = getTitle();

    drawerItemsList = getResources().getStringArray(R.array.nav_drawer_items);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerList = (ListView) findViewById(R.id.left_drawer);

    //add the items to the navigation drawer here
    navDrawerItems = new ArrayList<NavigationDrawerItem>();
    navDrawerItems.add(new NavigationDrawerItem(R.drawable.ic_account_circle_black_24dp, ParseUser.getCurrentUser().getUsername(), ""));
    navDrawerItems.add(new NavigationDrawerItem(R.drawable.ic_action_social_add, drawerItemsList[1], ""));
    navDrawerItems.add(new NavigationDrawerItem(R.drawable.ic_action_reqs, drawerItemsList[2], ""));
    navDrawerItems.add(new NavigationDrawerItem(R.drawable.ic_settings_power_black_24dp, drawerItemsList[3], ""));

    //set adapter
    adapter = new NavigationDrawerListAdapter(this, R.layout.drawer_list_item, navDrawerItems);
    drawerList.setAdapter(adapter);
    drawerList.setOnItemClickListener(new DrawerItemClickListener());

    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);
    getActionBar().setDisplayUseLogoEnabled(true);
    getActionBar().setLogo(R.drawable.ic_logo_wide);

    drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open,  R.string.drawer_close);
    drawerLayout.setDrawerListener(drawerToggle);

    generateListView();

 swipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
    swipeRefresh.setColorSchemeResources(R.color.white, R.color.black, R.color.gray);
    swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    generateListView();
                    swipeRefresh.setRefreshing(false);
                }
            }, 2500);
        }
    });

}

和我的自定义主题:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="OrangeActionBarTheme"
    parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/OrangeActionBar</item>
    <item name="android:actionMenuTextColor">#ffffff</item>
    <item name="actionMenuTextColor">#ffffff</item>
    </style>

<!-- ActionBar styles -->
<style name="OrangeActionBar"
    parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:background">@drawable/ab_solid</item>
</style>

我的徽标不会显示。我已经尝试在我的主题中设置一个徽标项目并将displayOptions 设置为useLogo|showHome 但这只是隐藏了所有活动中徽标/标题空间中应该存在的任何内容。我尝试在清单中添加 android:logo 属性无济于事。什么都没有显示,我不确定问题出在哪里。

我认为这可能与我的抽屉开关有关,但我无法正确诊断问题。知道为什么我的徽标没有出现在操作栏中,我可以做些什么来修复它?谢谢!

编辑:我的目标是 SDK 版本 11+。另外,我添加了我的 ActionBar 目前的样子。它显示标签而不是徽标,如果我删除标签,它会显示类名:

【问题讨论】:

  • 那么你的targetSDKVersion小于21?
  • @Xcihnegn 抱歉,我已经添加了这些详细信息。是的,我的目标是 11 岁以上。
  • 添加getActionBar().setHomeButtonEnabled(true);
  • 我试过没有成功。我编辑了代码以反映我的更改。我试着把它放在setLogo 之后和之前。

标签: android android-layout


【解决方案1】:

您不能在此处使用徽标,因为您使用的是导航抽屉。有推荐的设计,ActionBarDrawerToggle 实现了它。将应用程序徽标与导航图标放在一起会很奇怪。 要在操作栏中使用应用程序图标,只需使用不带 NavigationDrawer 的应用程序模式

【讨论】:

    【解决方案2】:

    您是否考虑过使用支持库中提供的工具栏(以及 AppCompatActivity 或 AppCompatDelegate)?它可从支持库 V7 中获得,您可以使用 setSupportActionBar(Toolbar) 将 ActionBar 设置为工具栏。您的 Activity 也需要从 AppCompat.NoActionBar 样式继承。

    然后您可以在 NavigationDrawerToggle 旁边有一个图标,如下所示:

    <android.support.v7.widget.Toolbar android:id="@+id/home_toolbar" android:layout_width="match_parent" android:layout_height="56dip" android:background="@color/white">
    
      <ImageView android:layout_width="56dip" android:layout_height="56dip" android:src="@drawable/ic_launcher" />
    
    </android.support.v7.widget.Toolbar>
    

    虽然您需要覆盖标题的设置,因为默认情况下它会出现在图标的左侧。您可以在工具栏上添加一个 textview 并将其设置为任何其他 TextView,并且您的 ImageView 可以包含几乎任何内容。

    如果您不能使用 AppCompatActivity,最新版本的支持库上周引入了一个接口 AppCompatCallback 和一个抽象类 AppCompatDelegate,您可以在正常活动中使用它们。我实际上还没有尝试过,但它的目的是让正常活动具有支持功能。这给出了示例用法:https://medium.com/google-developer-experts/how-to-add-toolbar-to-an-activity-which-doesn-t-extend-appcompatactivity-a07c026717b3

    显然这种方法有其缺点,但这种方法是有可能实现的!

    【讨论】:

    • 谢谢,但我不想添加图标,而是添加完整的徽标。
    • 你可以在 ImageView 中放任何东西,不一定只是一个图标。工具栏可让您添加几乎所有内容
    • 我明白了。我会试一试,尽管我记得由于某种原因无法使用 AppCompat。我认为它需要我的活动来扩展它,但我需要为我的后端设置扩展其他东西。我会再尝试。有其他设置方法吗?
    • 上周他们引入了一个接口 AppCompatCallback 和一个抽象类 AppCompatDelegate,您可以在正常活动中使用它们。我实际上还没有尝试过,但它的目的是让正常活动具有支持功能。这给出了示例用法:medium.com/google-developer-experts/…
    • 安迪,这很有帮助。我无法使用支持库,因为我已经在扩展一个类,但是这个新接口非常有用!请将您的 cmets 编辑为答案,以便我接受!
    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2023-03-13
    • 2013-10-10
    相关资源
    最近更新 更多