Adakah yang tahu cara mengatur padding antara ikon beranda ActionBar dan judul?
Adakah yang tahu cara mengatur padding antara ikon beranda ActionBar dan judul?
Jawaban:
Saya mengadaptasi jawaban Cliffus dan menetapkan logo-drawable dalam definisi gaya bilah tindakan saya, misalnya seperti ini di 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>
Drawable tampak seperti Cliffus (di sini dengan ikon peluncur aplikasi default) di 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>
Di android_manifest.xml Anda masih dapat menyetel ikon aplikasi yang berbeda (ikon peluncur di 'desktop'. Definisi logo yang berbeda di sini terlihat dalam aktivitas tanpa bilah tindakan.
EDIT : pastikan Anda menyetel drawable ini sebagai LOGO , bukan sebagai ikon aplikasi Anda seperti yang dilakukan beberapa pemberi komentar.
Cukup buat XML drawable dan letakkan di folder resource "drawable" (tanpa kepadatan atau konfigurasi lain).
<?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>
Langkah terakhir adalah menyetel drawable baru ini sebagai logo dalam manifes Anda (atau pada objek Actionbar dalam aktivitas Anda)
Semoga berhasil!
Saya juga menghadapi masalah serupa, dalam kasus saya, saya harus menetapkan judul secara dinamis pada setiap aktivitas tergantung pada kontennya.
Jadi ini berhasil untuk saya.
actionBar.setTitle(" " + yourActivityTitle);
Jika yang Anda inginkan hanyalah jarak, ini adalah solusi termudah yang dapat saya pikirkan.
app:titleMarginStart
atribut dalam XML tata letak.
Beginilah cara saya mengatur padding antara ikon beranda dan judul.
ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);
Saya tidak dapat menemukan cara untuk menyesuaikan ini melalui gaya xml ActionBar. Artinya, XML berikut tidak berfungsi:
<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>
Namun, jika Anda ingin mencapai ini melalui xml, kedua tautan ini dapat membantu Anda menemukan solusi:
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml
(Ini adalah tata letak sebenarnya yang digunakan untuk menampilkan ikon beranda di bilah tindakan) https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/action_bar_home.xml
padding
, tampaknya digunakan marginEnd
sejak api 17 - yang mungkin akan merusak solusi ini. Lihat milik saya di bawah
Ini adalah pertanyaan umum dalam Desain Material karena Anda mungkin ingin menyejajarkan judul bilah alat dengan konten dalam fragmen di bawah ini. Untuk melakukannya, Anda dapat mengganti pengisi default "12dp" dengan menggunakan atribut contentInsetStart = "72dp" di layout Anda seperti yang ditunjukkan di bawah ini
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"/>
Kemudian dalam aktivitas Anda, telepon
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
toolbar.setTitle("Title Goes Here");
Dan Anda berakhir dengan ini:
app:titleMarginStart="dimension"
mengincar gelar secara langsung.
contentInsetStart
memberi spasi antara ikon beranda dan judul, jawabannya setidaknya bisa mengatakan demikian. Pengujian saya barusan dengan contentInsetStart
sepertinya menempatkan spasi sebelum logo (yang memang tidak sama dengan ikon home).
Bagi saya, hanya kombinasi berikut yang berhasil, diuji dari API 18 hingga 24
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
di mana di "app" adalah: xmlns:app="http://schemas.android.com/apk/res-auto"
sebagai contoh.
<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>
Jika Anda menggunakan toolbar dari AppCompat (android.support.v7.widget.Toolbar,> = revision 24, June 2016), padding antara ikon dan judul dapat diubah dengan nilai berikut:
app:contentInsetStartWithNavigation="0dp"
Untuk meningkatkan jawaban saya, Anda dapat menggunakannya pada toolbar Anda secara langsung di dalam aktivitas Anda atau Anda dapat membuat file layout baru untuk toolbar Anda. Dalam kasus ini, Anda hanya perlu mengimpor @id toolbar Anda menggunakan properti include pada setiap tampilan yang diperlukan.
<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>
Anda kemudian dapat mengimpor tata letak Anda di activity.xml
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Menggunakan titleMarginStart
karya untuk saya. Contoh 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"/>
Atur logo seperti ini:
mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
Saya menggunakan gambar khusus, bukan teks judul default di sebelah kanan logo aplikasi saya. Ini diatur seperti programatik
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setCustomView(R.layout.include_ab_txt_logo);
actionBar.setDisplayShowCustomEnabled(true);
Masalah dengan jawaban di atas untuk saya adalah saran @ Cliffus tidak bekerja untuk saya karena masalah yang telah diuraikan orang lain dalam komentar dan sementara pengaturan padding programatik @dushyanth mungkin telah berfungsi di masa lalu, saya akan berpikir bahwa fakta bahwa spasi adalah sekarang diatur menggunakan android:layout_marginEnd="8dip"
sejak API 17 secara manual mengatur padding seharusnya tidak berpengaruh. Lihat link yang dia posting ke git untuk memverifikasi statusnya saat ini.
Solusi sederhana bagi saya adalah menetapkan margin negatif pada tampilan kustom saya di actionBar, seperti itu android:layout_marginLeft="-14dp"
. Tes cepat menunjukkan bahwa ini berfungsi untuk saya di 2.3.3 dan 4.3 menggunakanActionBarCompat
Semoga ini bisa membantu seseorang!
Saya memecahkan masalah ini dengan menggunakan tata letak Navigasi kustom
Dengan menggunakannya, Anda dapat menyesuaikan apa pun dalam judul di bilah tindakan:
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"/>
Saya memiliki masalah serupa tetapi dengan jarak antara atas dan ikon / logo aplikasi khusus di bilah tindakan. Solusi Dushyanth untuk mengatur padding secara terprogram bekerja untuk saya (mengatur padding pada ikon aplikasi / logo). Saya mencoba menemukan android.R.id.home atau R.id.abs__home ( hanya ActionBarSherlock , karena ini memastikan kompatibilitas ke belakang), dan tampaknya berfungsi di perangkat 2.3-4.3 yang telah saya uji.
Untuk kasus saya, itu dengan Toolbar saya menyelesaikannya seperti ini:
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>
Di Fragmen saya, saya memeriksa 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);
Semoga berhasil!
Anda dapat mengubah drawableSize dari DrawerArrow Anda seperti ini:
<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>
Ini bukan jawaban yang benar, karena Anda tidak dapat memilih sisi padding dan penskalaan ikon DrawerArrow saat mengubah drawableSize (drawableSize = width = height). Tapi Anda bisa margin dari kiri. Untuk margin dari kanan lakukan
findViewById(android.R.id.home).setPadding(10, 0, 5, 0);
Saya menggunakan metode ini setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight)
dan berhasil!
int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets);
mToolbar.setContentInsetsAbsolute(padding, 0);
Saat Anda menggunakan Toolbar kustom, Anda dapat menggunakan
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.activity_title);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.drawable.logo);
dan dalam tata letak toolbar Anda cukup setel app:titleMarginStart="16dp"
Perhatikan bahwa Anda harus mengatur ikon sebagai logo, jangan gunakan getSupportActionBar().setIcon(R.drawable.logo)
sebagai gantinya:
getSupportActionBar().setLogo(R.drawable.logo)
Saya terbiasa AppBarLayout
dan biasa ImageButton
melakukannya.
<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>
Kode Java saya:
findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
Anda juga dapat mencapai metode yang sama:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
Di XML Anda, setel app:titleMargin
di tampilan Toolbar Anda sebagai berikut:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:titleMarginStart="16dp"/>
Atau di kode Anda:
toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom
ini berfungsi bagi saya untuk menambahkan padding ke judul dan untuk ActionBar
ikon saya telah mengaturnya secara terprogram.
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
Cukup tambahkan " "
untuk nama aplikasi Anda. Ini akan menambah spasi antara ikon dan judul