使用AppCompat-v7在操作栏/工具栏中显示图标21


130

我尝试了这些-但仍然看不到以前的图标:

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

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


1
您可以添加活动类,在其中添加了操作栏内容?
Harsha Vardhan

Answers:


256
getSupportActionBar().setDisplayShowHomeEnabled(true);

随着

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

7
请注意,这getSupportActionBar()可能null取决于您的活动的样式。
jlhonora 2015年

2
仍然没有显示图标。我使用了getSupportActionBar()。setDisplayHomeAsUpEnabled(true); getSupportActionBar()。setIcon(R.drawable.ic_app_icon); getSupportActionBar()。setTitle(“ Label”);
Meenaxi '16

8
为什么图标显示在标题栏的中间?我想要标题栏的图标左侧。请帮助..谢谢
Mohammad Rajob

1
@Meenaxi您应该使用setDisplayShowHomeEnabled(true); 那个帮了我
大忙

1
请注意,设置图标不会使其可单击。如果您正在寻找可点击的图标,则需要在中使用.setHomeAsUpIndicator和处理它onOptionsItemSelected
约书亚·品特

32

在现代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()方法设置图标。 代码源。


1
我只想指出,当前Play商店Settings活动在操作栏中具有应用程序图标。材料更新后,该位置仍然存在。
奥斯坦·马奥尼

17

这对我有用:

    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

有很多不必要的方法,并且与图标无关
user924 '18

15

最简单的事情 只需添加:

app:navigationIcon="@drawable/ic_action_navigation_menu">

<android.support.v7.widget.Toolbar标签

@drawable/ic_action_navigation_menu图标的名称在哪里


1
完美的作品!这是在工具栏中添加导航图标的正确,最简单的方法。如果要检查导航图标的点击情况,可以在中检查android.R.id.homeID onOptionsItemSelected(...)
Sazid

12

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

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);

5
听起来很有希望-但仍然没有图标:-(
ligi 2014年

5

如果要设置主页或后退图标(而非徽标或静态图标),则可以使用

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

这是正确的答案,因为部署了外观和行为
cutiko 2016年

只有这样才能给我一个正常的外观(大小,边距,标题和图标之间的偏移量),即使使用矢量启动器(.xml)也可以正常工作,例如R.mipmap.ic_launcherR.mipmap.ic_launcher_round
-user924

并且我将其用作徽标/静态图标会导致其他解决方案
无法

5

对于操作栏:

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

对于工具栏:

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

5
ActionBar和Toolbar的2个代码之间没有区别,这是故意的吗?
金王

1
对于ActionBar,应为:getActionBar()。setDisplayHomeAsUpEnabled(true); getActionBar()。setHomeAsUpIndicator(R.drawable.ic_action_back);
Darsshan

这实际上是要走的路。仅仅使用setIcon不允许有一个可点击的按钮,在setHomeAsUpIndicator这种情况下处理它是onOptionsItemSelected一种享受。谢谢!
约书亚·品特

4
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" />

3

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

toolbar.setLogo();

或在xml中

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

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

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

带有导航图标,徽标和标题的工具栏


2

试试这个:

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);

静态图标


1
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);
}

0

在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。


0

试试这个。对我而言,它奏效了

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

0

在Kotlin中,我执行以下操作仅显示图标:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.