แสดงไอคอนในแถบการดำเนินการ / แถบเครื่องมือด้วย AppCompat-v7 21


130

ฉันลองสิ่งเหล่านี้ - แต่ยังไม่เห็นไอคอนเหมือนก่อน:

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

ดูเหมือนว่าจะใช้งานได้เมื่อฉันใช้แถบเครื่องมือแบบกำหนดเอง - แต่นั่นจะบังคับให้ฉันแตะเลย์เอาต์ทั้งหมดมีวิธีที่ดีกว่านี้ไหม


1
คุณสามารถเพิ่มคลาสกิจกรรมของคุณได้โดยที่คุณได้เพิ่มสิ่งต่างๆในแถบแอคชั่น?
Harsha Vardhan

คำตอบ:


256
getSupportActionBar().setDisplayShowHomeEnabled(true);

พร้อมด้วย

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

7
ระวังว่า getSupportActionBar()อาจnullขึ้นอยู่กับรูปแบบกิจกรรมของคุณ
jlhonora

2
ยังไม่แสดงไอคอน ฉันใช้ getSupportActionBar (). setDisplayHomeAsUpEnabled (จริง); . getSupportActionBar () คำสั่ง setIcon (R.drawable.ic_app_icon); . getSupportActionBar () setTitle ( "ป้าย");
Meenaxi

8
ทำไมไอคอนจึงแสดงขึ้นตรงกลางแถบชื่อเรื่อง ฉันต้องการไอคอนทางด้านซ้ายของแถบชื่อเรื่อง ช่วยด้วย .. ขอบคุณ
Mohammad Rajob

1
@Meenaxi คุณควรใช้ setDisplayShowHomeEnabled (true); นั่นเป็นเคล็ดลับสำหรับฉัน
arniotaki

1
โปรดทราบว่าการตั้งค่าไอคอนไม่ได้ทำให้คลิกได้ หากคุณกำลังมองหาไอคอนที่คลิกได้คุณจำเป็นต้องใช้.setHomeAsUpIndicatorและจัดการไอคอนนั้นในonOptionsItemSelectedไฟล์.
Joshua Pinter

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
ฉันแค่อยากจะชี้ให้เห็นว่าขณะนี้Settingsกิจกรรมใน Play Store มีไอคอนแอปในแถบการทำงาน สิ่งนี้ยังคงมีอยู่หลังจากการอัปเดต Material
Austyn Mahoney

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

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

6

สำหรับ Actionbar:

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

สำหรับ Toolbar:

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

5
ไม่มีความแตกต่างระหว่าง 2 รหัสสำหรับ ActionBar และ Toolbar เป็นเจตนาหรือไม่?
King King

1
สำหรับ ActionBar ควรเป็น: getActionBar (). setDisplayHomeAsUpEnabled (true); . getActionBar () setHomeAsUpIndicator (R.drawable.ic_action_back);
Darsshan

นี่คือวิธีที่จะไป เพียงแค่ใช้setIconไม่อนุญาตให้มีปุ่มที่คลิกได้โดยที่setHomeAsUpIndicatorและการจัดการนั้นใช้onOptionsItemSelectedงานได้จริง ขอบคุณ!
Joshua Pinter

5

หากคุณต้องการตั้งค่าไอคอนบ้านหรือไอคอนด้านหลัง (ไม่ใช่โลโก้หรือไอคอนคงที่) เพื่อให้คุณสามารถใช้ได้

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

นี่คือคำตอบที่ถูกต้องเนื่องจากปรับใช้รูปลักษณ์และพฤติกรรม
cutiko

สิ่งนี้ทำให้ฉันมีลักษณะปกติ (ขนาดระยะขอบการชดเชยระหว่างชื่อเรื่องและไอคอน) ใช้งานได้ดีแม้กับ vector launcher ( .xml) เช่นR.mipmap.ic_launcherหรือR.mipmap.ic_launcher_round
user924

และฉันใช้สิ่งนี้เป็นโลโก้ / ไอคอนคงที่ทำให้โซลูชันอื่นทำงานได้น่าเกลียด
user924

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

และแม้ว่าคุณจะมีชื่อที่ตั้งไว้บน Toolbar ชื่อนั้นก็ยังคงแสดงอยู่

เช่นเครื่องหมายถูกสีเขียวในภาพด้านล่างคือโลโก้

แถบเครื่องมือพร้อมไอคอนการนำทางโลโก้และชื่อเรื่อง


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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.