Qualcuno sa come impostare la spaziatura interna tra l'icona home di ActionBar e il titolo?
Qualcuno sa come impostare la spaziatura interna tra l'icona home di ActionBar e il titolo?
Risposte:
Ho adattato la risposta di Cliffus e ho assegnato il logo disegnabile nella definizione dello stile della mia barra delle azioni, ad esempio in 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>
Il drawable assomiglia a quello di Cliffus (qui con l'icona di avvio delle app predefinita) in 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>
In android_manifest.xml puoi ancora impostare un'icona dell'app diversa (icona di avvio sul "desktop". Qualsiasi definizione di logo diversa qui è visibile nelle attività senza una barra delle azioni.
MODIFICA : assicurati di impostare questo disegnabile come LOGO , non come l'icona della tua app come hanno fatto alcuni dei commentatori.
Basta creare un XML disegnabile e metterlo nella cartella delle risorse "drawable" (senza alcuna densità o altra configurazione).
<?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>
L'ultimo passaggio è impostare questo nuovo disegnabile come logo nel tuo manifest (o sull'oggetto Actionbar nella tua attività)
In bocca al lupo!
Ho anche affrontato un problema simile, nel mio caso ho dovuto impostare i titoli in modo dinamico su ciascuna attività a seconda del contenuto.
Quindi questo ha funzionato per me.
actionBar.setTitle(" " + yourActivityTitle);
Se tutto ciò che vuoi è la spaziatura, questa è la soluzione più semplice a cui potessi pensare.
app:titleMarginStart
attributo nell'XML di layout.
È così che sono stato in grado di impostare il riempimento tra l'icona home e il titolo.
ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);
Tuttavia, non sono riuscito a trovare un modo per personalizzarlo tramite gli stili xml di ActionBar. Cioè, il seguente XML non funziona:
<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>
Tuttavia, se stai cercando di ottenere questo risultato tramite xml, questi due collegamenti potrebbero aiutarti a trovare una soluzione:
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml
(Questo è il layout effettivo utilizzato per visualizzare l'icona home in una barra delle azioni) https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/action_bar_home.xml
padding
, sembra essere utilizzata marginEnd
dall'api 17, il che probabilmente interromperà questa soluzione. Vedi il mio sotto
Questa è una domanda comune in Material Design poiché potresti voler allineare il titolo della barra degli strumenti con il contenuto nel frammento sottostante. Per fare ciò, puoi sovrascrivere il riempimento predefinito di "12dp" utilizzando l'attributo contentInsetStart = "72dp" nel tuo layout toolbar.xml come mostrato di seguito
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"/>
Quindi nella tua attività, chiama
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
toolbar.setTitle("Title Goes Here");
E finisci con questo:
app:titleMarginStart="dimension"
per indirizzare direttamente il titolo.
contentInsetStart
mette uno spazio tra l'icona della casa e il titolo, la risposta potrebbe almeno dirlo. Il mio test solo ora con contentInsetStart
sembrava mettere lo spazio prima del logo (che certamente non è lo stesso dell'icona home).
Per me ha funzionato solo la seguente combinazione, testata dall'API 18 alla 24
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
dove in "app" è: xmlns:app="http://schemas.android.com/apk/res-auto"
per esempio.
<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>
Se stai utilizzando la barra degli strumenti da AppCompat (android.support.v7.widget.Toolbar,> = revisione 24, giugno 2016), il riempimento tra l'icona e il titolo può essere modificato con il seguente valore:
app:contentInsetStartWithNavigation="0dp"
Per migliorare la mia risposta, puoi usarlo sulla tua barra degli strumenti direttamente all'interno della tua attività oppure puoi creare un nuovo file di layout per la tua barra degli strumenti. In questo caso, devi solo importare il @id della barra degli strumenti utilizzando la proprietà include su ciascuna vista necessaria.
<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>
È quindi possibile importare il layout nel file activity.xml
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Usare titleMarginStart
opere per me. Esempio di 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"/>
Imposta il logo in questo modo:
mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
Sto usando un'immagine personalizzata invece del testo del titolo predefinito a destra del logo della mia app. Questo è impostato in modo programmatico come
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setCustomView(R.layout.include_ab_txt_logo);
actionBar.setDisplayShowCustomEnabled(true);
I problemi con le risposte sopra per me sono che il suggerimento di @ Cliffus non funziona per me a causa dei problemi che altri hanno delineato nei commenti e mentre l'impostazione del padding programmatico @dushyanth potrebbe aver funzionato in passato, penserei che il fatto che la spaziatura sia ora impostato utilizzando android:layout_marginEnd="8dip"
dall'API 17 l'impostazione manuale del riempimento non dovrebbe avere alcun effetto. Vedi il link che ha pubblicato su git per verificare il suo stato corrente.
Una soluzione semplice per me è impostare un margine negativo sulla mia visualizzazione personalizzata nella actionBar, in questo modo android:layout_marginLeft="-14dp"
. Un rapido test mostra che funziona per me su 2.3.3 e 4.3 utilizzandoActionBarCompat
Spero che questo aiuti qualcuno!
Ho risolto questo problema utilizzando il layout di navigazione personalizzato
Usandolo puoi personalizzare qualsiasi cosa nel titolo sulla barra delle azioni:
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"/>
Ho avuto un problema simile ma con la spaziatura tra l'icona / il logo dell'app personalizzata nella barra delle azioni. La soluzione di Dushyanth di impostare il padding ha funzionato in modo programmatico per me (impostare il padding sull'icona dell'app / logo). Ho provato a trovare android.R.id.home o R.id.abs__home ( solo ActionBarSherlock , poiché ciò garantisce la compatibilità con le versioni precedenti) e sembra funzionare su dispositivi 2.3-4.3 su cui ho testato.
Per il mio caso, è stato con Toolbar che l'ho risolto in questo modo:
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>
Nel mio frammento, controllo l'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);
In bocca al lupo!
Puoi cambiare drawableSize del tuo DrawerArrow in questo modo:
<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>
Non è la risposta corretta, perché non puoi scegliere il lato del padding e il ridimensionamento dell'icona DrawerArrow quando cambi drawableSize (drawableSize = width = height). Ma puoi margine da sinistra. A margine da destra fare
findViewById(android.R.id.home).setPadding(10, 0, 5, 0);
Ho usato questo metodo setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight)
e funziona!
int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets);
mToolbar.setContentInsetsAbsolute(padding, 0);
Quando utilizzi una barra degli strumenti personalizzata, puoi utilizzare
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.activity_title);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.drawable.logo);
e nel layout della barra degli strumenti è sufficiente impostare app:titleMarginStart="16dp"
Nota che devi impostare l'icona come logo, non usare getSupportActionBar().setIcon(R.drawable.logo)
invece usa:
getSupportActionBar().setLogo(R.drawable.logo)
L'ho usato AppBarLayout
e l' ho ImageButton
fatto su misura.
<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>
Il mio codice Java:
findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
Puoi ottenere lo stesso anche con il metodo:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
Nel tuo XML, imposta app:titleMargin
nella visualizzazione della barra degli strumenti come segue:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:titleMarginStart="16dp"/>
O nel tuo codice:
toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom
questo lavoro per me per aggiungere il riempimento al titolo e per l' ActionBar
icona l'ho impostato a livello di programmazione.
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
Basta aggiungere " "
per il nome della tua app Aggiungerà spazio tra l'icona e il titolo