【问题标题】:show icon in actionbar/toolbar with AppCompat-v7 21使用 AppCompat-v7 21 在操作栏/工具栏中显示图标
【发布时间】:2014-10-18 13:31:14
【问题描述】:

我尝试了这些 - 但仍然没有像以前那样看到图标:

getSupportActionBar().setLogo(R.drawable.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

当我使用自定义工具栏时它似乎可以工作 - 但这会迫使我触摸所有布局 - 有更好的方法吗?

【问题讨论】:

  • 你可以添加你的activity类,你在哪里添加了action bar的东西?

标签: android android-appcompat


【解决方案1】:
getSupportActionBar().setDisplayShowHomeEnabled(true);

随着

getSupportActionBar().setIcon(R.drawable.ic_launcher);

【讨论】:

  • 请注意,getSupportActionBar() 可能是 null,具体取决于您的活动风格。
  • 仍然没有显示图标。我用 getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setIcon(R.drawable.ic_app_icon); getSupportActionBar().setTitle("标签");
  • 为什么图标显示在标题栏的中间?我想要标题栏左侧的图标。请帮忙..谢谢
  • @Meenaxi 你应该使用 setDisplayShowHomeEnabled(true);那个对我有用
  • 请注意,设置图标不会使其可点击。如果您正在寻找可点击的图标,您需要使用.setHomeAsUpIndicator 并在您的onOptionsItemSelected 中处理它。
【解决方案2】:

在现代 Android UI 中,开发人员应该更多地依赖视觉 工具栏的配色方案与其应用程序图标不同。这 不鼓励使用应用程序图标和标题作为标准布局 在 API 21 及更高版本的设备上。

如果您不同意,可以尝试:

在 XML 中创建工具栏:

<android.support.v7.widget.Toolbar  
    android:id="@+id/my_awesome_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

在你的活动中:

@Override
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);
}

使用setLogo() 方法设置图标。 Code source.

【讨论】:

  • 我只想指出,目前 Play Store Settings Activity 在操作栏中有应用图标。材质更新后它仍然存在。
【解决方案3】:

这对我有用:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayUseLogoEnabled(true);
    getSupportActionBar().setLogo(R.drawable.ic_logo);
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional

还有:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_logo); //also displays wide logo
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional

【讨论】:

  • 有很多不必要的方法,与图标无关
【解决方案4】:

最简单的事情;只需添加:

app:navigationIcon="@drawable/ic_action_navigation_menu">

&lt;android.support.v7.widget.Toolbar 标签

@drawable/ic_action_navigation_menu 是图标的名称

【讨论】:

  • 完美运行!这是在工具栏中添加导航图标的正确且最简单的方法。如果您想检查导航图标的点击,您可以在onOptionsItemSelected(...) 中检查android.R.id.home ID。
【解决方案5】:

设置多个选项的更好方法:

setIcon/setLogo 方法只有在你设置了 DisplayOptions 的情况下才有效,试试这个 -

actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
actionBar.setIcon(R.drawable.ic_launcher);

您还可以设置显示LOGO的选项(只需添加常量ActionBar.DISPLAY_USE_LOGO)。更多信息-displayOptions

【讨论】:

    【解决方案6】:

    尝试使用:

    ActionBar ab = getSupportActionBar();
    ab.setHomeButtonEnabled(true);
    ab.setDisplayUseLogoEnabled(true);
    ab.setLogo(R.drawable.ic_launcher);
    

    【讨论】:

    • 听起来很有希望 - 但仍然没有图标 :-(
    【解决方案7】:

    对于操作栏:

    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
    

    对于工具栏:

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
    

    【讨论】:

    • ActionBar和Toolbar的2个代码没有区别,这是故意的吗?
    • 对于 ActionBar 应该是:getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
    • 这实际上是要走的路。仅使用setIcon 不允许点击按钮,而setHomeAsUpIndicator 并在onOptionsItemSelected 中处理它是一种享受。谢谢!
    【解决方案8】:

    如果您想设置主页或返回图标(不是徽标或静态图标)以便您可以使用

     getSupportActionBar().setDisplayHomeAsUpEnabled(true);
     getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );
    

    【讨论】:

    • 这是正确答案,因为部署外观和行为
    • 只有这给了我一个正常的外观(大小、边距、标题和图标之间的偏移),即使使用矢量启动器 (.xml) 也可以正常工作,例如 R.mipmap.ic_launcherR.mipmap.ic_launcher_round
    • 我将其用作徽标/静态图标,因为其他解决方案效果不佳
    【解决方案9】:
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_launcher);
    

    创建一个 XML 布局调用 tool_bar.xml

    <?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:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:background="@color/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark"
        android:elevation="4dp">
    
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:src="@drawable/ic_action_search"/>
    
        </RelativeLayout>
    </android.support.v7.widget.Toolbar>
    

    现在在你的主要活动中添加这一行

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

    【讨论】:

      【解决方案10】:

      如果您不想使用 setSupportActionBar 将工具栏设置为操作栏,您可以在导航图标旁边添加一个徽标(例如,如果您有后退按钮),如下所示:

      toolbar.setLogo();
      

      或在xml中

      <android.support.v7.widget.Toolbar 
          ....
          android:logo="@drawable/logo"
          app:logo="@drawable/logo"/>
      

      即使您在工具栏上设置了标题,标题仍会显示。

      例如:下图中的绿色勾号是徽标

      【讨论】:

        【解决方案11】:

        试试这个:

        import android.support.v7.app.ActionBar;
        import android.support.v7.app.AppCompatActivity;
        ...
            ActionBar actionbar = getSupportActionBar();
            actionbar.setDisplayHomeAsUpEnabled(true);
            actionbar.setHomeAsUpIndicator(R.drawable.ic_launcher);
        
        so your icon will be used for Home / back
        or
        
        import android.support.v7.app.ActionBar;
        import android.support.v7.app.AppCompatActivity;
        ...
            ActionBar actionbar = getSupportActionBar();
            actionbar.setDisplayShowHomeEnabled(true);
            actionbar.setIcon(R.drawable.ic_launcher);
        

        静态图标

        【讨论】:

          【解决方案12】:
          toolbar.setLogo(resize(logo, (int) Float.parseFloat(mContext.getResources().getDimension(R.dimen._120sdp) + ""), (int) Float.parseFloat(mContext.getResources().getDimension(R.dimen._35sdp) + "")));
          
          
          public Drawable resize(Drawable image, int width, int height)
          {
              Bitmap b = ((BitmapDrawable) image).getBitmap();
              Bitmap bitmapResized = Bitmap.createScaledBitmap(b, width, height, false);
              return new BitmapDrawable(getResources(), bitmapResized);
          }
          

          【讨论】:

            【解决方案13】:

            在 Xamarin.Android 中,您可以使用这些:

            SupportActionBar.SetHomeButtonEnabled(true);
            SupportActionBar.SetDisplayShowHomeEnabled(true);
            SupportActionBar.SetDisplayUseLogoEnabled(true);
            SupportActionBar.SetIcon(Resource.Drawable.ic_launcher);
            SupportActionBar.SetDisplayShowTitleEnabled(false);
            

            需要使用 Android.Support.V7.App.AppCompatActivity。

            【讨论】:

              【解决方案14】:

              试试这个。对我来说它有效

              getSupportActionBar().setDisplayShowHomeEnabled(true);
              getSupportActionBar().setDisplayHomeAsUpEnabled(true);
              getSupportActionBar().setDisplayUseLogoEnabled(true);
              

              【讨论】:

                【解决方案15】:

                在 Kotlin 中,我做了以下只是为了显示图标:

                supportActionBar?.setDisplayShowHomeEnabled(true)
                supportActionBar?.setIcon(R.drawable.ic_icon_small)
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-12-14
                  • 2014-12-19
                  • 2014-12-14
                  • 2014-12-24
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-12-26
                  • 2014-12-22
                  相关资源
                  最近更新 更多