Có ai biết cách đặt đệm giữa biểu tượng trang chủ của ActionBar và tiêu đề không?
Có ai biết cách đặt đệm giữa biểu tượng trang chủ của ActionBar và tiêu đề không?
Câu trả lời:
Tôi đã điều chỉnh câu trả lời của Cliffus và gán logo có thể vẽ trong định nghĩa kiểu thanh hành động của mình, ví dụ như thế này trong 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>
Có thể vẽ trông giống như Cliffus 'một (ở đây với biểu tượng trình khởi chạy ứng dụng mặc định) trong 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>
Trong android_manifest.xml, bạn vẫn có thể đặt biểu tượng ứng dụng khác (biểu tượng trình khởi chạy trên 'máy tính để bàn'. Mọi định nghĩa logo khác nhau ở đây đều hiển thị trong các hoạt động mà không có thanh tác vụ).
CHỈNH SỬA : đảm bảo bạn đặt có thể vẽ này làm LOGO , không phải là biểu tượng ứng dụng của bạn như một số người bình luận đã làm.
Chỉ cần tạo một tệp XML có thể vẽ được và đặt nó vào thư mục tài nguyên "có thể vẽ được" (không có mật độ hoặc cấu hình khác).
<?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>
Bước cuối cùng là đặt biểu trưng có thể vẽ mới này làm biểu trưng trong tệp kê khai của bạn (hoặc trên đối tượng Thanh hành động trong hoạt động của bạn)
Chúc may mắn!
Tôi cũng gặp phải vấn đề tương tự, trong trường hợp của tôi, tôi phải đặt tiêu đề động cho từng hoạt động tùy thuộc vào nội dung.
Vì vậy, điều này đã làm việc cho tôi.
actionBar.setTitle(" " + yourActivityTitle);
Nếu tất cả những gì bạn muốn là khoảng cách, đây là giải pháp dễ nhất mà tôi có thể nghĩ ra.
app:titleMarginStart
thuộc tính trong XML bố cục.
Đây là cách tôi có thể đặt phần đệm giữa biểu tượng trang chủ và tiêu đề.
ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);
Mặc dù vậy, tôi không thể tìm thấy cách tùy chỉnh điều này thông qua các kiểu xml ActionBar. Đó là, XML sau đây không hoạt động:
<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>
Tuy nhiên, nếu bạn đang tìm cách đạt được điều này thông qua xml, hai liên kết này có thể giúp bạn tìm ra giải pháp:
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml
(Đây là bố cục thực tế được sử dụng để hiển thị biểu tượng trang chủ trong thanh tác vụ) https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/action_bar_home.xml
padding
, nó dường như được sử dụng marginEnd
kể từ api 17 - có thể sẽ phá vỡ giải pháp này. Xem của tôi bên dưới
Đây là một câu hỏi phổ biến trong Material Design vì bạn có thể muốn đặt tiêu đề thanh công cụ của mình với nội dung trong đoạn bên dưới. Để thực hiện việc này, bạn có thể ghi đè phần đệm mặc định của "12dp" bằng cách sử dụng thuộc tính contentInsetStart = "72dp" trong bố cục toolbar.xml của bạn như được hiển thị bên dưới
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"/>
Sau đó, trong hoạt động của bạn, hãy gọi
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
toolbar.setTitle("Title Goes Here");
Và bạn kết thúc với điều này:
app:titleMarginStart="dimension"
để nhắm mục tiêu tiêu đề trực tiếp.
contentInsetStart
đặt khoảng trống giữa biểu tượng trang chủ và tiêu đề, câu trả lời ít nhất có thể nói như vậy. Thử nghiệm của tôi vừa rồi với contentInsetStart
dường như đặt khoảng trắng trước logo (phải thừa nhận là không giống với biểu tượng trang chủ).
Đối với tôi chỉ có sự kết hợp sau đây hoạt động, được thử nghiệm từ API 18 đến 24
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
trong "ứng dụng" là: xmlns:app="http://schemas.android.com/apk/res-auto"
ví dụ.
<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>
Nếu bạn đang sử dụng thanh công cụ từ AppCompat (android.support.v7.widget.Toolbar,> = phiên bản 24, tháng 6 năm 2016), phần đệm giữa biểu tượng và tiêu đề có thể được thay đổi với giá trị sau:
app:contentInsetStartWithNavigation="0dp"
Để cải thiện câu trả lời của tôi, bạn có thể sử dụng nó trên thanh công cụ ngay bên trong hoạt động của bạn hoặc bạn có thể tạo tệp bố cục mới cho thanh công cụ của mình. Trong trường hợp này, bạn chỉ cần nhập @id của thanh công cụ bằng thuộc tính include trên mỗi dạng xem cần thiết.
<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>
Sau đó, bạn có thể nhập bố cục của mình trên activity.xml
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Sử dụng titleMarginStart
công trình cho tôi. Ví dụ về 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"/>
Đặt logo như vậy:
mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
Tôi đang sử dụng hình ảnh tùy chỉnh thay vì văn bản tiêu đề mặc định ở bên phải biểu trưng ứng dụng của tôi. Điều này được thiết lập theo chương trình như
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setCustomView(R.layout.include_ab_txt_logo);
actionBar.setDisplayShowCustomEnabled(true);
Các vấn đề với các câu trả lời ở trên đối với tôi là đề xuất của @ Cliffus không phù hợp với tôi do các vấn đề mà người khác đã nêu trong các nhận xét và trong khi cài đặt đệm có lập trình @dushyanth có thể đã hoạt động trong quá khứ, tôi nghĩ rằng thực tế là khoảng cách là hiện được đặt bằng cách sử dụng android:layout_marginEnd="8dip"
vì API 17 thiết lập thủ công phần đệm sẽ không có tác dụng. Xem liên kết mà anh ấy đã đăng lên git để xác minh trạng thái hiện tại của nó.
Một giải pháp đơn giản cho tôi là đặt một biên âm trên chế độ xem tùy chỉnh của tôi trong actionBar, như vậy android:layout_marginLeft="-14dp"
. Một thử nghiệm nhanh cho thấy nó hoạt động đối với tôi trên 2.3.3 và 4.3 bằng cách sử dụngActionBarCompat
Hy vọng điều này sẽ giúp ai đó!
Tôi đã giải quyết vấn đề này bằng cách sử dụng bố cục Điều hướng tùy chỉnh
Sử dụng nó, bạn có thể tùy chỉnh mọi thứ trong tiêu đề trên thanh tác vụ:
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"/>
Tôi đã gặp sự cố tương tự nhưng với khoảng cách giữa biểu tượng / biểu tượng ứng dụng tùy chỉnh trên thanh tác vụ. Giải pháp đặt đệm theo chương trình của Dushyanth phù hợp với tôi (đặt đệm trên biểu tượng ứng dụng / logo). Tôi đã cố gắng tìm android.R.id.home hoặc R.id.abs__home ( chỉ dành cho ActionBarSherlock , vì điều này đảm bảo khả năng tương thích ngược) và nó có vẻ hoạt động trên các thiết bị 2.3-4.3 mà tôi đã thử nghiệm.
Đối với trường hợp của tôi, đó là với Thanh công cụ, tôi đã giải quyết nó như thế này:
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>
Trong Fragment của tôi, tôi kiểm tra 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);
Chúc may mắn!
Bạn có thể thay đổi drawableSize của DrawerArrow như thế này:
<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>
Nó không phải là câu trả lời chính xác, vì bạn không thể chọn tỷ lệ bên đệm và biểu tượng DrawerArrow khi thay đổi drawableSize (drawableSize = width = height). Nhưng bạn có thể lề trái. Để lề phải làm
findViewById(android.R.id.home).setPadding(10, 0, 5, 0);
Tôi đã sử dụng phương pháp này setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight)
và nó hoạt động!
int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets);
mToolbar.setContentInsetsAbsolute(padding, 0);
Khi bạn đang sử dụng Thanh công cụ tùy chỉnh, bạn có thể sử dụng
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.activity_title);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.drawable.logo);
và trong bố cục thanh công cụ của bạn, chỉ cần đặt app:titleMarginStart="16dp"
Lưu ý rằng bạn phải đặt biểu tượng làm logo, không sử dụng getSupportActionBar().setIcon(R.drawable.logo)
thay vào đó hãy sử dụng:
getSupportActionBar().setLogo(R.drawable.logo)
Tôi đã sử dụng AppBarLayout
và tùy chỉnh ImageButton
làm như vậy.
<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>
Mã Java của tôi:
findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
Bạn cũng có thể đạt được điều tương tự bằng phương pháp:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
Trong XML của bạn, hãy đặt app:titleMargin
trong dạng xem Thanh công cụ của bạn như sau:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:titleMarginStart="16dp"/>
Hoặc trong mã của bạn:
toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom
công việc này giúp tôi thêm phần đệm vào tiêu đề và cho ActionBar
biểu tượng, tôi đã đặt điều đó theo chương trình.
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
Chỉ cần thêm " "
tên ứng dụng của bạn Nó sẽ thêm khoảng cách giữa biểu tượng và tiêu đề