มีใครทราบวิธีตั้งค่าช่องว่างระหว่างไอคอนหน้าแรกของ ActionBar และชื่อเรื่องหรือไม่?
มีใครทราบวิธีตั้งค่าช่องว่างระหว่างไอคอนหน้าแรกของ ActionBar และชื่อเรื่องหรือไม่?
คำตอบ:
ฉันปรับคำตอบ 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 คุณยังสามารถตั้งค่าไอคอนแอปอื่นได้ (ไอคอนตัวเรียกใช้งานบน "เดสก์ท็อป" คำจำกัดความของโลโก้ที่แตกต่างกันจะปรากฏในกิจกรรมโดยไม่มีแถบการทำงาน
แก้ไข : ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าที่วาดได้นี้เป็น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 ในกิจกรรมของคุณ)
โชคดี!
ฉันยังประสบปัญหาที่คล้ายกันในกรณีของฉันฉันต้องตั้งชื่อแบบไดนามิกในแต่ละกิจกรรมขึ้นอยู่กับเนื้อหา
สิ่งนี้ได้ผลสำหรับฉัน
actionBar.setTitle(" " + yourActivityTitle);
ถ้าสิ่งที่คุณต้องการคือระยะห่างนี่เป็นวิธีที่ง่ายที่สุดที่ฉันคิดได้
app:titleMarginStart
แอตทริบิวต์ใน XML ของเค้าโครง
นี่คือวิธีที่ฉันสามารถตั้งค่าช่องว่างระหว่างไอคอนหน้าแรกและชื่อเรื่อง
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
padding
ดูเหมือนว่าจะใช้marginEnd
ตั้งแต่ api 17 - ซึ่งอาจจะทำลายโซลูชันนี้ ดูของฉันด้านล่าง
นี่เป็นคำถามทั่วไปในการออกแบบวัสดุเนื่องจากคุณอาจต้องการจัดบรรทัดชื่อแถบเครื่องมือกับเนื้อหาในส่วนด้านล่าง ในการดำเนินการนี้คุณสามารถแทนที่ช่องว่างภายในเริ่มต้นของ "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");
และคุณจะจบลงด้วยสิ่งนี้:
app:titleMarginStart="dimension"
การกำหนดเป้าหมายชื่อโดยตรง
contentInsetStart
ใส่ช่องว่างระหว่างไอคอนหน้าแรกและชื่อเรื่องอย่างน้อยคำตอบก็สามารถพูดได้ การทดสอบของฉันในตอนนี้contentInsetStart
ดูเหมือนว่าจะวางช่องว่างไว้ก่อนโลโก้ (ซึ่งยอมรับว่าไม่เหมือนกับไอคอนบ้าน)
สำหรับฉันมีเพียงชุดค่าผสมต่อไปนี้เท่านั้นที่ได้รับการทดสอบจาก 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>
หากคุณใช้แถบเครื่องมือจาก 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"/>
ใช้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";
ฉันใช้มาก่อนชื่อและทำงานให้ฉัน
ฉันใช้รูปภาพที่กำหนดเองแทนข้อความชื่อเรื่องเริ่มต้นทางด้านขวาของโลโก้แอปของฉัน สิ่งนี้ตั้งค่าโดยใช้โปรแกรมเช่น
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
หวังว่านี่จะช่วยใครสักคน!
ฉันแก้ไขปัญหานี้โดยใช้รูปแบบการนำทางที่กำหนดเอง
ใช้มันคุณสามารถปรับแต่งอะไรก็ได้ในชื่อเรื่องบนแถบการกระทำ:
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"/>
ฉันมีปัญหาที่คล้ายกัน แต่มีการเว้นระยะห่างระหว่างขึ้นและไอคอน / โลโก้แอปที่กำหนดเองในแถบการทำงาน โซลูชันการตั้งค่าช่องว่างภายในของ Dushyanth ใช้งานได้กับฉัน (ตั้งค่าช่องว่างบนไอคอนแอป / โลโก้) ฉันพยายามค้นหาทั้งandroid.R.id.homeหรือR.id.abs__home ( ActionBarSherlock เท่านั้นเนื่องจากสิ่งนี้ช่วยให้มั่นใจได้ว่าสามารถใช้งานร่วมกันได้ย้อนหลัง) และดูเหมือนว่าจะใช้งานได้กับอุปกรณ์ 2.3-4.3 ที่ฉันทดสอบ
สำหรับกรณีของฉันมันใช้ 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);
โชคดี!
คุณสามารถเปลี่ยน 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);
ฉันใช้วิธีนี้setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight)
แล้วได้ผล!
int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets);
mToolbar.setContentInsetsAbsolute(padding, 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)
ฉันใช้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);
คุณสามารถบรรลุสิ่งเดียวกันได้ด้วยวิธีการเช่นกัน:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
ใน 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
งานนี้สำหรับฉันในการเพิ่มช่องว่างภายในชื่อและสำหรับActionBar
ไอคอนฉันได้ตั้งค่านั้นโดยทางโปรแกรม
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
เพียงเพิ่ม" "
ชื่อแอปของคุณมันจะเพิ่มช่องว่างระหว่างไอคอนและชื่อเรื่อง