hiển thị biểu tượng trên thanh hành động / thanh công cụ với AppCompat-v7 21


130

Tôi đã thử những thứ này - nhưng vẫn không thấy biểu tượng như trước:

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

Nó dường như hoạt động khi tôi sử dụng thanh công cụ tùy chỉnh - nhưng điều đó sẽ buộc tôi chạm vào tất cả các bố cục - có cách nào tốt hơn để làm như vậy không?


1
Bạn có thể thêm lớp hoạt động của mình, nơi bạn đã thêm công cụ thanh hành động?
Harsha Vardhan

Câu trả lời:


256
getSupportActionBar().setDisplayShowHomeEnabled(true);

cùng với

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

7
Coi chừng đó getSupportActionBar()có thể nulltùy thuộc vào phong cách hoạt động của bạn.
jlhonora

2
vẫn là biểu tượng không hiển thị của nó. tôi đã sử dụng getSupportActionBar (). setDisplayHomeAsUpEnables (true); getSupportActionBar (). setIcon (R.drawable.ic_app_icon); getSupportActionBar (). setTitle ("Nhãn");
Meenaxi 30/03/2016

8
Tại sao Biểu tượng hiển thị ở giữa thanh Tiêu đề? Tôi muốn Biểu tượng bên trái của thanh Tiêu đề. Xin hãy giúp đỡ .. Cảm ơn
Mohammad Rajob

1
@Meenaxi bạn nên sử dụng setDisplayShowHomeEnables (true); Người đó đã lừa tôi
arniotaki

1
Lưu ý rằng việc đặt biểu tượng không làm cho nó có thể nhấp được. Nếu bạn đang tìm kiếm một biểu tượng có thể nhấp, bạn cần sử dụng .setHomeAsUpIndicatorvà xử lý nó trong onOptionsItemSelected.
Joshua Pinter

32

Trong các giao diện người dùng Android hiện đại, các nhà phát triển nên dựa nhiều hơn vào bảng màu riêng biệt cho thanh công cụ hơn là biểu tượng ứng dụng của họ. Việc sử dụng biểu tượng ứng dụng cộng với tiêu đề làm bố cục tiêu chuẩn không được khuyến khích trên các thiết bị API 21 và mới hơn.

Nếu bạn không đồng ý, bạn có thể thử với:

Để tạo thanh công cụ trong 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" />

Trong hoạt động của bạn:

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

Sử dụng phương thức setLogo () để đặt biểu tượng. Mã nguồn.


1
Tôi chỉ muốn chỉ ra rằng hiện tại SettingsHoạt động Cửa hàng Play có biểu tượng ứng dụng trong thanh hành động. Điều này vẫn còn đó sau khi cập nhật Vật liệu.
Austyn Mahoney

17

Điều này làm việc cho tôi:

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

cũng như:

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

có nhiều phương thức không cần thiết và không liên quan đến biểu tượng
user924

15

điều đơn giản nhất để làm; chỉ cần thêm:

app:navigationIcon="@drawable/ic_action_navigation_menu">

vào <android.support.v7.widget.Toolbarthẻ

nơi @drawable/ic_action_navigation_menulà tên của biểu tượng


1
Hoạt động hoàn hảo! Đây là cách chính xác và đơn giản nhất để thêm biểu tượng điều hướng trong thanh công cụ. Nếu bạn muốn kiểm tra các lần nhấp vào biểu tượng điều hướng, bạn có thể kiểm tra android.R.id.homeID trong onOptionsItemSelected(...).
Sazid

12

Một cách tốt hơn để thiết lập nhiều tùy chọn:

setIcon/setLogophương thức sẽ chỉ hoạt động nếu bạn đã đặt DisplayOptions Hãy thử điều này -

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

Bạn cũng có thể đặt các tùy chọn để hiển thị LOGO (chỉ cần thêm hằng số ActionBar.DISPLAY_USE_LOGO). Thêm thông tin - displayOptions


6

Hãy thử sử dụng:

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

5
Nghe có vẻ đầy hứa hẹn - nhưng vẫn không có Biểu tượng :-(
ligi

5

nếu bạn muốn đặt biểu tượng nhà hoặc quay lại (không phải biểu tượng hoặc biểu tượng tĩnh) để bạn có thể sử dụng

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

Đây là câu trả lời đúng, vì triển khai ngoại hình và hành vi
cutiko

chỉ điều này mang lại cho tôi một diện mạo bình thường (kích thước, lề, bù giữa tiêu đề và biểu tượng), hoạt động tốt ngay cả với trình khởi chạy vector ( .xml), như R.mipmap.ic_launcherhoặcR.mipmap.ic_launcher_round
user924

và tôi đã sử dụng biểu tượng này làm biểu tượng / biểu tượng tĩnh khiến các giải pháp khác hoạt động xấu
user924

5

Đối với Actionbar:

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

Đối với Thanh công cụ:

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

5
Không có sự khác biệt giữa 2 mã cho ActionBar và Thanh công cụ, đây có phải là chủ ý?
Vua King

1
Đối với ActionBar nên là: getActionBar (). SetDisplayHomeAsUpEnables (true); getActionBar (). setHomeAsUpTheicator (R.drawable.ic_action_back);
Dars Sơn

Đây thực sự là con đường để đi. Chỉ sử dụng setIconkhông cho phép một nút có thể nhấp, trong đó setHomeAsUpIndicatorxử lý và xử lý trong onOptionsItemSelectedcông việc. Cảm ơn!
Joshua Pinter

4
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

HOẶC tạo bố cục XML gọitool_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>

Bây giờ trong bạn hoạt động chính thêm dòng này

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

3

Nếu bạn không muốn đặt thanh công cụ của mình làm thanh hành động bằng cách sử dụng setSupportActionBar , bạn có thể thêm logo bên cạnh biểu tượng điều hướng của mình (ví dụ: nếu bạn có nút quay lại) như thế này:

toolbar.setLogo();

hoặc trong xml

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

Và ngay cả khi bạn có một tiêu đề được đặt trên Thanh công cụ, tiêu đề vẫn sẽ hiển thị.

Ví dụ: Kiểm tra màu xanh lá cây trong hình ảnh dưới đây là logo

Thanh công cụ với biểu tượng điều hướng, logo và tiêu đề


2

Thử cái này:

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

cho biểu tượng tĩnh


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

Trong Xamarin.Android bạn có thể sử dụng những thứ sau:

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

sử dụng Android.Support.V7.App.AppCompatActivity là bắt buộc.


0

Thử cái này. Đối với tôi nó đã làm việc

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

0

Trong Kotlin tôi đã làm như sau để chỉ hiển thị biểu tượng:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.