tampilkan ikon di actionbar / toolbar dengan AppCompat-v7 21

130

Saya mencoba ini - tetapi masih tidak melihat ikon seperti sebelumnya:

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

Tampaknya berfungsi ketika saya menggunakan bilah alat khusus - tetapi itu akan memaksa saya untuk menyentuh semua tata letak - apakah ada cara yang lebih baik untuk melakukannya?

ligi
sumber
1
Anda dapat menambahkan kelas aktivitas Anda, di mana Anda telah menambahkan item bilah tindakan?
Harsha Vardhan

Jawaban:

256
getSupportActionBar().setDisplayShowHomeEnabled(true);

bersama

getSupportActionBar().setIcon(R.drawable.ic_launcher);
nadavfima
sumber
7
Hati-hati bahwa getSupportActionBar()bisa nulltergantung pada gaya aktivitas Anda.
jlhonora
2
masih tidak menampilkan ikonnya. saya menggunakan getSupportActionBar (). setDisplayHomeAsUpEnabled (true); getSupportActionBar (). setIcon (R.drawable.ic_app_icon); getSupportActionBar (). setTitle ("Label");
Meenaxi
8
Mengapa Ikon ditampilkan di tengah bilah Judul? Saya ingin Ikon sisi kiri bilah Judul. Tolong bantu .. Terima kasih
Mohammad Rajob
1
@ Meenaxi Anda harus menggunakan setDisplayShowHomeEnabled (true); Yang itu melakukan trik untuk saya
arniotaki
1
Perhatikan bahwa pengaturan ikon tidak membuatnya dapat diklik. Jika Anda mencari ikon yang dapat diklik, Anda perlu menggunakan .setHomeAsUpIndicatordan menanganinya di onOptionsItemSelected.
Joshua Pinter
32

Di UI Android modern, pengembang harus lebih bersandar pada skema warna yang berbeda secara visual untuk bilah alat daripada pada ikon aplikasi mereka. Penggunaan ikon aplikasi plus judul sebagai tata letak standar tidak disarankan pada perangkat API 21 dan yang lebih baru.

Jika Anda tidak setuju, Anda dapat mencoba:

Untuk membuat bilah alat di 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" />

Dalam aktivitas Anda:

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

Gunakan metode setLogo () untuk mengatur ikon. Sumber kode

LordRaydenMK
sumber
1
Saya hanya ingin menunjukkan bahwa saat ini SettingsAktivitas Play Store memiliki ikon aplikasi di bilah tindakan. Ini masih ada setelah pembaruan Material.
Austyn Mahoney
17

Ini bekerja untuk saya:

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

sebaik:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_logo); //also displays wide logo
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional
Michał K
sumber
ada banyak metode yang tidak perlu dan tidak terkait dengan ikon
user924
15

hal paling sederhana untuk dilakukan; tambahkan saja:

app:navigationIcon="@drawable/ic_action_navigation_menu">

ke <android.support.v7.widget.Toolbartag

dimana @drawable/ic_action_navigation_menunama ikonnya

Pila
sumber
1
Bekerja dengan sempurna! Ini adalah cara yang benar dan paling sederhana untuk menambahkan ikon navigasi di bilah alat. Jika Anda ingin memeriksa klik ikon navigasi, Anda dapat memeriksa android.R.id.homeID di onOptionsItemSelected(...).
Sazid
12

Cara yang lebih baik untuk mengatur beberapa opsi:

setIcon/setLogoMetode hanya akan berfungsi jika Anda telah mengatur DisplayOptions Coba ini -

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

Anda juga dapat mengatur opsi untuk menampilkan LOGO (cukup tambahkan konstan ActionBar.DISPLAY_USE_LOGO). Informasi lebih lanjut - DisplayOptions

Vintesh
sumber
6

Coba gunakan:

ActionBar ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayUseLogoEnabled(true);
ab.setLogo(R.drawable.ic_launcher);
Chris Banes
sumber
5
terdengar menjanjikan - tapi masih belum ada Ikon :-(
ligi
5

jika Anda ingin mengatur ikon home atau back (bukan logo atau ikon statis) sehingga Anda dapat menggunakannya

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );
smoothumut
sumber
ini adalah jawaban yang benar, karena menyebarkan penampilan dan perilaku
cutiko
hanya ini yang memberi saya tampilan normal (ukuran, margin, offset antara judul dan ikon), berfungsi baik bahkan dengan peluncur vektor ( .xml), seperti R.mipmap.ic_launcheratauR.mipmap.ic_launcher_round
user924
dan saya menggunakan ini sebagai logo / ikon statis menyebabkan solusi lain berfungsi buruk
user924
5

Untuk Actionbar:

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

Untuk Bilah Alat:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
Peter Ivanov
sumber
5
Tidak ada perbedaan antara 2 kode untuk ActionBar dan Toolbar, apakah ini disengaja?
King King
1
Untuk ActionBar harus: getActionBar (). SetDisplayHomeAsUpEnabled (true); getActionBar (). setHomeAsUpIndicator (R.drawable.ic_action_back);
Darsshan
Ini sebenarnya jalan yang harus ditempuh. Hanya menggunakan setIcontidak memungkinkan tombol yang dapat diklik, di mana setHomeAsUpIndicatordan menangani itu dalam onOptionsItemSelectedbekerja memperlakukan. Terima kasih!
Joshua Pinter
4
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

ATAU buat panggilan tata letak XMLtool_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>

Sekarang di aktivitas utama Anda tambahkan baris ini

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

Jika Anda tidak ingin mengatur bilah alat sebagai bilah tindakan menggunakan setSupportActionBar , Anda dapat menambahkan logo di sebelah ikon navigasi Anda (jika Anda memiliki tombol kembali misalnya) seperti ini:

toolbar.setLogo();

atau dalam xml

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

Dan bahkan jika Anda memiliki judul yang ditetapkan pada Toolbar, judul tersebut akan tetap ditampilkan.

Mis: Tanda centang hijau pada gambar di bawah adalah logo

Bilah alat dengan ikon navigasi, logo, dan judul

Malek Hijazi
sumber
2

Coba ini:

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

untuk ikon statis

Odilon Cenamo
sumber
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);
}
Hardik Vasani
sumber
0

Di Xamarin.Android Anda dapat menggunakan ini:

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

menggunakan Android.Support.V7.App.AppCompatActivity diperlukan.

Daniele D.
sumber
0

Coba ini. Bagi saya itu berhasil

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);
Matteo
sumber
0

Di Kotlin saya melakukan yang berikut ini hanya untuk menunjukkan ikon:

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