ช่องว่างระหว่างไอคอนหน้าแรกของ ActionBar และชื่อเรื่อง


110

มีใครทราบวิธีตั้งค่าช่องว่างระหว่างไอคอนหน้าแรกของ ActionBar และชื่อเรื่องหรือไม่?


13
ยินดีต้อนรับสู่โลกของแฮ็กไปนี้: Android ทุกคนควรค้นพบสิ่งง่ายๆนี้ (แม้แต่มือใหม่) หากเราต้องการสิ่งนี้ในเทคโนโลยี UI อื่น ๆ และการเขียนโปรแกรมแอปพลิเคชัน อย่างไรก็ตามใน Android มันลึกลับจริงๆ พวกเขาจงใจซ่อนคุณลักษณะออกไปทำให้มันซับซ้อนและเพียงเพื่อให้ Android กลายเป็นโลกของแฮ็ก ฉันไม่รู้ว่าจุดประสงค์สุดท้ายของพวกเขาคืออะไร
King King

1
นี้คำถามและคำตอบให้วิธีการเพื่อให้บรรลุนี้มีคุณลักษณะภายในแถบเครื่องมือ (สนับสนุน v7)
อลิซาเบ

Android ห่วยกว่า iOS
Borzh

คำตอบ:


69

ฉันปรับคำตอบ Cliffus และกำหนดโลโก้ที่วาดได้ในคำจำกัดความสไตล์แถบการกระทำของฉันตัวอย่างเช่นใน res / style.xml:

<item name="android:actionBarStyle">@style/MyActionBar</item>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#3f51b5</item>
        <item name="android:titleTextStyle">@style/ActionBar.TitleText</item>
        <item name="android:textColor">#fff</item>
        <item name="android:textSize">18sp</item>
        <item name="android:logo">@drawable/actionbar_space_between_icon_and_title</item>
</style>

สิ่งที่วาดได้ดูเหมือนของ Cliffus (ที่นี่พร้อมกับไอคอนตัวเรียกใช้งานแอปเริ่มต้น) ใน res / drawable / actionbar_space_between_icon_and_title.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/ic_launcher"
        android:right="20dp"/>
</layer-list>

ใน android_manifest.xml คุณยังสามารถตั้งค่าไอคอนแอปอื่นได้ (ไอคอนตัวเรียกใช้งานบน "เดสก์ท็อป" คำจำกัดความของโลโก้ที่แตกต่างกันจะปรากฏในกิจกรรมโดยไม่มีแถบการทำงาน


ทำไมมันถึงไม่มีผลกับ Android 5.1
Logan Guo

ขออภัยฉันไม่สามารถพูดอะไรบางอย่างเกี่ยวกับเรื่องนี้ใน 5.1 ฉันเปลี่ยนไปใช้ Toolbar-Control ที่ยืดหยุ่นมากขึ้น หากยังไม่ได้ดำเนินการขอแนะนำให้เปิดคำถามใหม่ที่นี่ใน StackOverflow และเขียนรายละเอียดเพิ่มเติมสิ่งที่ใช้ได้ผลสำหรับคุณ (<5.1) และอะไรใช้ไม่ได้ผลและสิ่งที่คุณลองใช้กับ 5.1 แต่ไม่ได้วิธีแก้ปัญหา
Minsky

ขอบคุณ @Minsky ฉันได้รับแรงบันดาลใจจากคำตอบของคุณในการแก้ไขปัญหาของฉันฉันใส่คำตอบไว้ด้านล่างได้อย่างไร :)
บริบท

ถ้าใช้ mipmap ล่ะ?
Yura Shinkarev

100

แก้ไข : ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าที่วาดได้นี้เป็นLOGOไม่ใช่เป็นไอคอนแอปของคุณเหมือนที่ผู้แสดงความคิดเห็นบางคนทำ

เพียงสร้าง XML ที่วาดได้และวางไว้ในโฟลเดอร์ทรัพยากร "drawable" (โดยไม่มีความหนาแน่นหรือการกำหนดค่าอื่น ๆ )

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:drawable="@drawable/my_logo"
        android:right="10dp"/>


</layer-list>

ขั้นตอนสุดท้ายคือการตั้งค่า drawable ใหม่นี้เป็นโลโก้ในรายการของคุณ (หรือบนวัตถุ Actionbar ในกิจกรรมของคุณ)

โชคดี!


1
มีปัญหาใหญ่ที่นี่กับการแก้ปัญหานี้ ฉันใช้มันและ @Alesqui ถูกต้อง - ไอคอนแอพเปลี่ยนไปและเล็กลง ... คุณสามารถเปลี่ยนไอคอนได้ แต่เนื่องจาก dp แตกต่างกันสำหรับโทรศัพท์รุ่นอื่นดังนั้นโซลูชันนี้จึงไม่ตัดในแอปที่ใช้งานจริง
Johan S

3
ตรวจสอบให้แน่ใจว่าคุณตั้งค่าสิ่งที่วาดได้นี้เป็น LOGO ไม่ใช่เป็นไอคอนแอปของคุณ โชคดี!
Cliffus

1
ฉันยังเห็นการบิดเบือน ถ้าฉันใช้ช่องว่างด้านขวาตามด้านบนด้านขวามือของรูปภาพจะถูกครอบตัด
Neil

1
ทางออกที่น่าสนใจ แต่ไม่ได้ผลสำหรับฉัน - ฉันสามารถเพิ่มช่องว่างภายในด้วยวิธีนี้หรือครอบตัดภาพโลโก้ - ไม่ดี (4.3)
Dori

1
@Cliffus - ทางออกที่ดี ความต้องการของฉันคือเอาโลโก้ไปทางซ้ายฉันจึงใช้: android: left = "- 4dp"
TharakaNirmana

55

ฉันยังประสบปัญหาที่คล้ายกันในกรณีของฉันฉันต้องตั้งชื่อแบบไดนามิกในแต่ละกิจกรรมขึ้นอยู่กับเนื้อหา

สิ่งนี้ได้ผลสำหรับฉัน

actionBar.setTitle("  " + yourActivityTitle);

ถ้าสิ่งที่คุณต้องการคือระยะห่างนี่เป็นวิธีที่ง่ายที่สุดที่ฉันคิดได้


13
ทำไมโหวตลง? อย่าคิดว่ามันเป็นคำตอบที่ผิด แต่เป็นอีกวิธีหนึ่งในการทำเช่นนั้น
Rahul Sainani

3
@idratherbeintheair ใช่ฉันยอมรับว่านี่ไม่ใช่วิธีที่ "สะอาดที่สุด" ดังนั้นตอนนี้จึงบอกว่าง่ายที่สุดเท่านั้น แต่เมื่อคุณชี้ให้เห็นบางสิ่งโปรดโพสต์ทางเลือกอื่น ฉันประสบปัญหานี้และนี่คือสิ่งที่ฉันใช้ในแอพของฉันฉันจึงแชร์
Rahul Sainani

3
จริงๆ? โซลูชันนี้อาจทำงานไม่เหมือนกันบนหน้าจอต่างๆที่มี DPI ต่างกัน
Roman Bugaian

5
ฉันจะไม่เลือกวิธีนี้เพราะฉันต้องการความเสถียรมากกว่านี้ในแอปของฉัน แต่ฉันอยากถามคนเหล่านั้นว่า "มันไม่สะอาด" โอ้มายก๊อดโซลูชัน CLEAN สำหรับปัญหานี้อยู่ที่ไหน แฮ็คที่มีโลโก้ทั้งหมด setPadding ก็ดูไม่สะอาดสำหรับฉันเช่นกัน! แค่อ่านความคิดเห็นมีกี่คนที่มีปัญหากับพวกนั้นด้วย การตั้งค่า android: paddingLeft บนชื่อ - สิ่งที่จะทำความสะอาดถ้ามันใช้งานได้ เราถูกทิ้งไว้ที่นี่ในความมืดเพื่อคิดค้นแฮ็กเพราะด้วยเหตุผลบางอย่างมันก็ไม่ได้ผลอย่างที่ควรจะเป็น จึงไม่มีอะไร "ไม่สะอาด"
Varvara Kalinina

1
ทางออกที่ดีกว่าคือการใช้app:titleMarginStartแอตทริบิวต์ใน XML ของเค้าโครง
LarsH

40

นี่คือวิธีที่ฉันสามารถตั้งค่าช่องว่างระหว่างไอคอนหน้าแรกและชื่อเรื่อง

ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);

ฉันไม่พบวิธีปรับแต่งสิ่งนี้ผ่านสไตล์ xml ของ ActionBar นั่นคือ XML ต่อไปนี้ไม่ทำงาน:

<style name="ActionBar" parent="android:style/Widget.Holo.Light.ActionBar">        
    <item name="android:titleTextStyle">@style/ActionBarTitle</item>
    <item name="android:icon">@drawable/ic_action_home</item>        
</style>

<style name="ActionBarTitle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textSize">18sp</item>
    <item name="android:paddingLeft">12dp</item>   <!-- Can't get this padding to work :( -->
</style>

อย่างไรก็ตามหากคุณต้องการบรรลุสิ่งนี้ผ่าน xml ลิงก์ทั้งสองนี้อาจช่วยคุณค้นหาวิธีแก้ไข:

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml

(นี่คือเค้าโครงจริงที่ใช้เพื่อแสดงไอคอนหน้าแรกในแถบการทำงาน) https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/action_bar_home.xml


1
@Dushyanth ฉันเพิ่งลอง แต่พูดว่าข้อยกเว้นตัวชี้ว่างบน imageview ฉันมีทั้ง homeUpIndicator และไอคอนบ้านในแถบการทำงาน
Krishna Shrestha

1
สิ่งนี้ใช้ได้เฉพาะกับ API> = 11 เนื่องจาก android.R.id.home ถูกนำมาใช้ใน API 11 ฉันใช้ actionbarcompat เพื่อให้มีแถบการทำงานบนอุปกรณ์ honeycomp ก่อน จะจัดการอย่างไรที่นั่น?
tobias

แฮ็คนิดหน่อย ดูคำตอบของ Cliffus ด้านล่างสำหรับโซลูชันที่สะอาดกว่า
dhaag23

ไม่ได้ตั้งค่าระยะห่างภายในบ้านอีกต่อไปpaddingดูเหมือนว่าจะใช้marginEndตั้งแต่ api 17 - ซึ่งอาจจะทำลายโซลูชันนี้ ดูของฉันด้านล่าง
Dori

@tobias R.id.home อยู่ที่นั่นทุกครั้งแม้กระทั่งก่อนระดับ 11 ก็ไม่สามารถใช้ได้
oscarthecat

32

นี่เป็นคำถามทั่วไปในการออกแบบวัสดุเนื่องจากคุณอาจต้องการจัดบรรทัดชื่อแถบเครื่องมือกับเนื้อหาในส่วนด้านล่าง ในการดำเนินการนี้คุณสามารถแทนที่ช่องว่างภายในเริ่มต้นของ "12dp" โดยใช้แอตทริบิวต์contentInsetStart = "72dp"ในเค้าโครง toolbar.xml ของคุณดังที่แสดงด้านล่าง

toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/app_theme_color"
    app:contentInsetStart="72dp"/>

จากนั้นในกิจกรรมของคุณโทร

Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
toolbar.setTitle("Title Goes Here");

และคุณจะจบลงด้วยสิ่งนี้:

แถบเครื่องมือ


นี่ไม่ได้ผลเลยในกรณีของฉัน โปรดแจ้งให้เราทราบรูปแบบที่กำหนดให้เป็นกิจกรรม
Nitin Mesta

11
นี่เป็นวิธีที่ถูกต้องในการทำเช่นนี้ นอกจากนี้ยังมีapp:titleMarginStart="dimension"การกำหนดเป้าหมายชื่อโดยตรง
Markus Rubey

คิดว่าสำหรับผู้ใช้ส่วนใหญ่นี่จะเป็นคำตอบที่ "ถูกต้อง" ใช้งานได้อย่างมีเสน่ห์ขอบคุณ!
Taras

1
นี่เป็นคำตอบที่ "ถูกต้อง" ได้อย่างไรหากคำถามเกี่ยวกับการเว้นช่องว่างระหว่างไอคอนหน้าแรกและชื่อ ไอคอนบ้านไม่ได้กล่าวถึงที่นี่ (หรือโลโก้หรือรูปแบบอื่น ๆ ) หากcontentInsetStartใส่ช่องว่างระหว่างไอคอนหน้าแรกและชื่อเรื่องอย่างน้อยคำตอบก็สามารถพูดได้ การทดสอบของฉันในตอนนี้contentInsetStartดูเหมือนว่าจะวางช่องว่างไว้ก่อนโลโก้ (ซึ่งยอมรับว่าไม่เหมือนกับไอคอนบ้าน)
LarsH

30

สำหรับฉันมีเพียงชุดค่าผสมต่อไปนี้เท่านั้นที่ได้รับการทดสอบจาก API 18 ถึง 24

app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"

โดยที่ใน "แอป" คือ: xmlns:app="http://schemas.android.com/apk/res-auto"

ตัวอย่างเช่น.

 <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/SE_Life_Green"
                app:contentInsetLeft="0dp"
                app:contentInsetStart="0dp"
                app:contentInsetStartWithNavigation="0dp"
                >
                .......
                .......
                .......
            </android.support.v7.widget.Toolbar>

1
ขอบคุณมาก. @Ajit
shahid17june

1
เยี่ยมมาก จะดีกว่าถ้าคุณสามารถให้ตัวอย่าง XML ที่เกี่ยวข้องเพื่อชี้แจงว่าจะนำไปไว้ที่ใด (ฉันรู้ว่าจะวางบรรทัดนี้ไว้ที่ไหน)
John Pang

สวัสดี @JohnPang คุณสามารถวางสิ่งนี้ไว้ใน Toolbar ของเค้าโครงของคุณดังที่แสดงไว้ด้านบน
Ajit

29

หากคุณใช้แถบเครื่องมือจาก AppCompat (android.support.v7.widget.Toolbar,> = revision 24, มิถุนายน 2016) ช่องว่างระหว่างไอคอนและหัวเรื่องสามารถเปลี่ยนแปลงได้ด้วยค่าต่อไปนี้:

  app:contentInsetStartWithNavigation="0dp"

เพื่อปรับปรุงคำตอบของฉันคุณสามารถใช้คำตอบนี้บนแถบเครื่องมือของคุณโดยตรงในกิจกรรมของคุณหรือคุณสามารถสร้างไฟล์เลย์เอาต์ใหม่สำหรับแถบเครื่องมือของคุณ ในกรณีนี้คุณต้องนำเข้า @id ของแถบเครื่องมือโดยใช้คุณสมบัติ include ในแต่ละมุมมองที่ต้องการ

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:elevation="4dp"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    app:contentInsetStartWithNavigation="0dp">
</android.support.v7.widget.Toolbar>

จากนั้นคุณสามารถนำเข้าเค้าโครงของคุณบน activity.xml

<include
        layout="@layout/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

เยี่ยมมาก จะดีกว่าถ้าคุณสามารถให้ตัวอย่าง XML ที่เกี่ยวข้องเพื่อชี้แจงว่าจะนำไปไว้ที่ใด (ฉันรู้ว่าจะวางบรรทัดนี้ไว้ที่ไหน)
John Pang

@JohnPang ฉันให้รายละเอียดคำตอบของฉันหวังว่ามันจะช่วยให้คุณเข้าใจวิธีใช้คุณสมบัตินี้
tryp

@ Bolein95 คุณเป็นห้องสมุดสนับสนุนหรือไม่? เพื่อให้สามารถช่วยเหลือคุณได้โปรดให้ข้อมูลเพิ่มเติม
tryp

น่าสังเกตว่าพารามิเตอร์นี้ถูกนำมาใช้ในไลบรารีการออกแบบเวอร์ชัน 24 ดังนั้นหากคุณติดอยู่ในคราสที่เวอร์ชัน 23 (เช่นที่ฉันเคยทำจนถึงเมื่อวานนี้ ... ) คุณจะไม่สามารถเข้าถึงได้
FlorianT

@FloriantT ขอบคุณสำหรับความแม่นยำฉันได้อัปเดตคำตอบเกี่ยวกับความคิดเห็นของคุณแล้ว
tryp

6

ใช้titleMarginStartงานสำหรับฉัน ตัวอย่าง Xamarin:

<android.support.v7.widget.Toolbar
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:id="@+id/toolbar"
  android:layout_height="wrap_content"
  android:layout_width="match_parent"
  android:minHeight="?attr/actionBarSize"
  android:background="?attr/colorPrimary"
  app:titleMarginStart="24dp"/>

ตั้งค่าโลโก้ดังนี้:

mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";

คุณคืออัจฉริยะ. +1
Jacob Sánchez


2

ฉันใช้รูปภาพที่กำหนดเองแทนข้อความชื่อเรื่องเริ่มต้นทางด้านขวาของโลโก้แอปของฉัน สิ่งนี้ตั้งค่าโดยใช้โปรแกรมเช่น

    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setDisplayUseLogoEnabled(true);
    actionBar.setCustomView(R.layout.include_ab_txt_logo);
    actionBar.setDisplayShowCustomEnabled(true);

ปัญหาเกี่ยวกับคำตอบข้างต้นสำหรับฉันคือข้อเสนอแนะของ @ Cliffus ไม่ได้ผลสำหรับฉันเนื่องจากปัญหาที่คนอื่นระบุไว้ในความคิดเห็นและในขณะที่การตั้งค่าช่องว่างแบบเป็นโปรแกรมของ @dushyanth อาจใช้งานได้ในอดีตฉันคิดว่าการเว้นระยะห่างคือ ตอนนี้ตั้งค่าโดยใช้android:layout_marginEnd="8dip"ตั้งแต่ API 17 การตั้งค่าช่องว่างด้วยตนเองไม่ควรมีผล ดูลิงก์ที่เขาโพสต์ในคอมไพล์เพื่อตรวจสอบสถานะปัจจุบัน

วิธีการแก้ปัญหาที่ง่ายสำหรับฉันคือการกำหนดอัตรากำไรขั้นต้นในทางลบต่อมุมมองของฉันเองใน actionbar android:layout_marginLeft="-14dp"เช่นดังนั้น การทดสอบอย่างรวดเร็วแสดงให้เห็นว่ามันใช้ได้กับฉันใน 2.3.3 และ 4.3 โดยใช้ActionBarCompat

หวังว่านี่จะช่วยใครสักคน!


@Diri คุณสามารถเพิ่มได้มากขึ้นเราสามารถสร้างแถบการกระทำขึ้นลงซ้ายขวาได้
ไหม

@amitsharma - ฉันไม่แน่ใจว่าคุณหมายถึงอะไร - คุณหมายถึงการย้ายแถบการทำงานจากด้านบนของหน้าจอหรือไม่? ถ้าเป็นเช่นนั้นฉันคิดว่าคุณจะต้องสร้างมุมมองแถบการดำเนินการที่กำหนดเองเพื่อทำสิ่งนี้ - ดูเหมือนว่ามันอาจจะไม่ดีเท่าไหร่ :)
Dori

ในกรณีนี้ฉันไม่รู้ว่าคุณหมายถึงอะไร "คุณสามารถเพิ่มอีกได้ไหมเราสามารถสร้างแถบการกระทำขึ้นลงซ้ายขวา"
Dori

2

ฉันแก้ไขปัญหานี้โดยใช้รูปแบบการนำทางที่กำหนดเอง

ใช้มันคุณสามารถปรับแต่งอะไรก็ได้ในชื่อเรื่องบนแถบการกระทำ:

build.gradle

dependencies {
    compile 'com.android.support:appcompat-v7:21.0.+'
    ...
}

AndroidManifest.xml

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".MainActivity"
            android:theme="@style/ThemeName">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

styles.xml

<style name="ThemeName" parent="Theme.AppCompat.Light">
   <item name="actionBarStyle">@style/ActionBar</item>
   <item name="android:actionBarStyle" tools:ignore="NewApi">@style/ActionBar</item>

<style name="ActionBar" parent="Widget.AppCompat.ActionBar">
   <item name="displayOptions">showCustom</item>
   <item name="android:displayOptions" tools:ignore="NewApi">showCustom</item>

    <item name="customNavigationLayout">@layout/action_bar</item>
   <item name="android:customNavigationLayout" tools:ignore="NewApi">@layout/action_bar</item>

    <item name="background">@color/android:white</item>
   <item name="android:background">@color/android:white</item>

action_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/action_bar_title"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:gravity="center_vertical"
          android:drawableLeft="@drawable/ic_launcher"
          android:drawablePadding="10dp"
          android:textSize="20sp"
          android:textColor="@android:color/black"
          android:text="@string/app_name"/>

0

ฉันมีปัญหาที่คล้ายกัน แต่มีการเว้นระยะห่างระหว่างขึ้นและไอคอน / โลโก้แอปที่กำหนดเองในแถบการทำงาน โซลูชันการตั้งค่าช่องว่างภายในของ Dushyanth ใช้งานได้กับฉัน (ตั้งค่าช่องว่างบนไอคอนแอป / โลโก้) ฉันพยายามค้นหาทั้งandroid.R.id.homeหรือR.id.abs__home ( ActionBarSherlock เท่านั้นเนื่องจากสิ่งนี้ช่วยให้มั่นใจได้ว่าสามารถใช้งานร่วมกันได้ย้อนหลัง) และดูเหมือนว่าจะใช้งานได้กับอุปกรณ์ 2.3-4.3 ที่ฉันทดสอบ


0

สำหรับกรณีของฉันมันใช้ Toolbar ฉันแก้ไขได้ดังนี้:

ic_toolbar_drawble.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:drawable="@drawable/ic_toolbar"
    android:right="-16dp"
    android:left="-16dp"/>
</layer-list>

ใน Fragment ของฉันฉันตรวจสอบ api:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
      toolbar.setLogo(R.drawable.ic_toolbar);
else
      toolbar.setLogo(R.drawable.ic_toolbar_draweble);

โชคดี!


0

คุณสามารถเปลี่ยน drawableSize ของ DrawerArrow ได้ดังนี้:

<style name="MyTheme" parent="android:Theme.WithActionBar">
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="barLength">24dp</item>
    <item name="arrowShaftLength">24dp</item>
    <item name="arrowHeadLength">10dp</item>
    <item name="drawableSize">42dp</item> //this is your answer
</style>

ไม่ใช่คำตอบที่ถูกต้องเนื่องจากคุณไม่สามารถเลือกด้าน padding และการปรับขนาดไอคอน DrawerArrow เมื่อเปลี่ยน drawableSize (drawableSize = width = height) แต่คุณสามารถขอบจากด้านซ้าย ระยะขอบจากขวาทำ

findViewById(android.R.id.home).setPadding(10, 0, 5, 0);

0

ฉันใช้วิธีนี้setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight)แล้วได้ผล!

int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets);
mToolbar.setContentInsetsAbsolute(padding, 0);

0

เมื่อคุณใช้ Toolbar แบบกำหนดเองคุณสามารถใช้

toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.activity_title);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.drawable.logo);

และในเค้าโครงแถบเครื่องมือของคุณเพียงแค่ตั้งค่า app:titleMarginStart="16dp"

โปรดทราบว่าคุณต้องตั้งค่าไอคอนเป็นโลโก้อย่าใช้getSupportActionBar().setIcon(R.drawable.logo) แทน: getSupportActionBar().setLogo(R.drawable.logo)


0

ฉันใช้AppBarLayoutและกำหนดเองImageButtonทำเช่นนั้น

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:elevation="0dp"
    android:background="@android:color/transparent"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

   <RelativeLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent">

       <ImageView
           android:layout_width="32dp"
           android:layout_height="32dp"
           android:src="@drawable/selector_back_button"
           android:layout_centerVertical="true"
           android:layout_marginLeft="8dp"
           android:id="@+id/back_button"/>

       <android.support.v7.widget.Toolbar
           android:id="@+id/toolbar"
           android:layout_width="match_parent"
           android:layout_height="?attr/actionBarSize"
           app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
    </RelativeLayout>    
</android.support.design.widget.AppBarLayout>

รหัส Java ของฉัน:

findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);

0

คุณสามารถบรรลุสิ่งเดียวกันได้ด้วยวิธีการเช่นกัน:

Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);

0

ใน XML ของคุณตั้งค่าapp:titleMarginในมุมมอง Toolbar ของคุณดังต่อไปนี้:

<androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:titleMarginStart="16dp"/>

หรือในรหัสของคุณ:

toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom

-2

งานนี้สำหรับฉันในการเพิ่มช่องว่างภายในชื่อและสำหรับActionBarไอคอนฉันได้ตั้งค่านั้นโดยทางโปรแกรม

 getActionBar().setTitle(Html.fromHtml("<font color='#fffff'>&nbsp;&nbsp;&nbsp;Boat App </font>"));

-2
<string name="app_name">"    "Brick Industry</string>

เพียงเพิ่ม" "ชื่อแอปของคุณมันจะเพิ่มช่องว่างระหว่างไอคอนและชื่อเรื่อง


นี่ก็ไม่เลวฉันไม่รู้ว่าทำไมมันถึงถูกโหวตลง
Martin De Simone

บางทีวิธีแก้ปัญหาที่ง่ายที่สุดก็คือสิ่งที่ดีที่สุด! ขอบคุณ
Nuhman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.