Weiß jemand, wie man das Auffüllen zwischen dem Home-Symbol der ActionBar und dem Titel einstellt?
Weiß jemand, wie man das Auffüllen zwischen dem Home-Symbol der ActionBar und dem Titel einstellt?
Antworten:
Ich habe die Cliffus-Antwort angepasst und das Logo in meiner Actionbar-Stildefinition zugewiesen, zum Beispiel wie folgt 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>
Das Drawable sieht wie das von Cliffus aus (hier mit dem Standard-App-Launcher-Symbol) 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 der Datei android_manifest.xml können Sie immer noch ein anderes App-Symbol festlegen (Startsymbol auf 'Desktop'. Jede andere Logo-Definition hier ist in Aktivitäten ohne Aktionsleiste sichtbar.
BEARBEITEN : Stellen Sie sicher, dass Sie dieses Zeichen als LOGO festlegen , nicht als App-Symbol wie einige der Kommentatoren.
Machen Sie einfach ein XML-Zeichenzeichen und legen Sie es im Ressourcenordner "Zeichenbar" ab (ohne Dichte oder andere Konfiguration).
<?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>
Der letzte Schritt besteht darin, dieses neue Zeichenelement als Logo in Ihrem Manifest (oder auf dem Aktionsleistenobjekt in Ihrer Aktivität) festzulegen.
Viel Glück!
Ich hatte auch ein ähnliches Problem: In meinem Fall musste ich die Titel für jede Aktivität je nach Inhalt dynamisch festlegen.
Das hat bei mir funktioniert.
actionBar.setTitle(" " + yourActivityTitle);
Wenn Sie nur den Abstand wünschen, ist dies die einfachste Lösung, die ich mir vorstellen kann.
app:titleMarginStart
Attributs im Layout-XML.
Auf diese Weise konnte ich die Auffüllung zwischen dem Home-Symbol und dem Titel einstellen.
ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);
Ich konnte jedoch keine Möglichkeit finden, dies über die ActionBar-XML-Stile anzupassen. Das heißt, das folgende XML funktioniert nicht:
<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>
Wenn Sie dies jedoch über XML erreichen möchten, können Sie über diese beiden Links eine Lösung finden:
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml
(Dies ist das tatsächliche Layout, mit dem das Startsymbol in einer Aktionsleiste angezeigt wird.) Https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/action_bar_home.xml
padding
, er scheint marginEnd
seit API 17 zu verwenden - was diese Lösung wahrscheinlich zerstören wird. Siehe meine unten
Dies ist eine häufige Frage in Material Design, da Sie möglicherweise den Titel Ihrer Symbolleiste mit dem Inhalt des folgenden Fragments ausrichten möchten. Zu diesem Zweck können Sie die Standardauffüllung von "12dp" überschreiben, indem Sie das Attribut contentInsetStart = "72dp" in Ihrem toolbar.xml-Layout verwenden, wie unten gezeigt
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"/>
Rufen Sie dann in Ihrer Aktivität an
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
toolbar.setTitle("Title Goes Here");
Und am Ende haben Sie Folgendes:
app:titleMarginStart="dimension"
direkt auf den Titel abzuzielen.
contentInsetStart
zwischen dem Home-Symbol und dem Titel ein Leerzeichen steht, könnte die Antwort dies zumindest sagen. Mein Test mit contentInsetStart
schien gerade das Leerzeichen vor dem Logo zu platzieren (was zugegebenermaßen nicht mit dem Home-Symbol identisch ist).
Für mich hat nur die folgende Kombination funktioniert, getestet von API 18 bis 24
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
wo in "App" ist: xmlns:app="http://schemas.android.com/apk/res-auto"
beispielsweise.
<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>
Wenn Sie die Symbolleiste von AppCompat verwenden (android.support.v7.widget.Toolbar,> = Revision 24, Juni 2016), kann der Abstand zwischen dem Symbol und dem Titel mit dem folgenden Wert geändert werden:
app:contentInsetStartWithNavigation="0dp"
Um meine Antwort zu verbessern, können Sie sie in Ihrer Symbolleiste direkt in Ihrer Aktivität verwenden oder eine neue Layoutdatei für Ihre Symbolleiste erstellen. In diesem Fall müssen Sie nur die @ -ID Ihrer Symbolleiste mithilfe der include-Eigenschaft für jede benötigte Ansicht importieren.
<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>
Sie können dann Ihr Layout in Ihre activity.xml importieren
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Mit titleMarginStart
Arbeiten für mich. Xamarin Beispiel:
<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"/>
Stellen Sie das Logo so ein:
mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
Ich verwende ein benutzerdefiniertes Bild anstelle des Standardtiteltextes rechts neben meinem Apps-Logo. Dies ist programmatisch wie eingerichtet
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setCustomView(R.layout.include_ab_txt_logo);
actionBar.setDisplayShowCustomEnabled(true);
Die Probleme mit den obigen Antworten für mich sind @ Cliffus 'Vorschlag funktioniert bei mir aufgrund der Probleme, die andere in den Kommentaren umrissen haben, nicht, und während die programmatische Polsterung von @dushyanth in der Vergangenheit möglicherweise funktioniert hat, würde ich denken, dass die Tatsache der Abstand ist Jetzt mit einstellen, android:layout_marginEnd="8dip"
da API 17 das manuelle Einstellen der Auffüllung keine Auswirkung haben sollte. Sehen Sie sich den Link an, den er an git gepostet hat, um den aktuellen Status zu überprüfen.
Eine einfache Lösung für mich besteht darin, einen negativen Rand für meine benutzerdefinierte Ansicht in der Aktionsleiste festzulegen android:layout_marginLeft="-14dp"
. Ein schneller Test zeigt, dass es für mich unter 2.3.3 und 4.3 funktioniertActionBarCompat
Hoffe das hilft jemandem!
Ich habe dieses Problem mithilfe eines benutzerdefinierten Navigationslayouts gelöst
Mit ihm können Sie alles im Titel in der Aktionsleiste anpassen:
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"/>
Ich hatte ein ähnliches Problem, aber mit dem Abstand zwischen dem Symbol und dem Logo der benutzerdefinierten App in der Aktionsleiste. Dushyanths Lösung zum Einstellen der Polsterung funktionierte programmatisch für mich (Einstellen der Polsterung auf dem App- / Logo-Symbol). Ich habe versucht, entweder android.R.id.home oder R.id.abs__home zu finden ( nur ActionBarSherlock , da dies die Abwärtskompatibilität gewährleistet), und es scheint auf 2.3-4.3-Geräten zu funktionieren, auf denen ich getestet habe.
Für meinen Fall habe ich es mit der Symbolleiste folgendermaßen gelöst:
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>
In meinem Fragment überprüfe ich die 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);
Viel Glück!
Sie können drawableSize Ihres DrawerArrow folgendermaßen ändern:
<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>
Die Antwort ist nicht richtig, da Sie beim Ändern von drawableSize (drawableSize = width = height) nicht die Polsterseite und die Skalierung des DrawerArrow-Symbols auswählen können. Aber Sie können von links Rand. Um von rechts zu kanten
findViewById(android.R.id.home).setPadding(10, 0, 5, 0);
Ich habe diese Methode verwendet setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight)
und es funktioniert!
int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets);
mToolbar.setContentInsetsAbsolute(padding, 0);
Wenn Sie eine benutzerdefinierte Symbolleiste verwenden, können Sie diese verwenden
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.activity_title);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.drawable.logo);
und in Ihrem Symbolleistenlayout einfach einstellen app:titleMarginStart="16dp"
Beachten Sie, dass Sie das Symbol als Logo festlegen müssen. Verwenden Sie getSupportActionBar().setIcon(R.drawable.logo)
stattdessen nicht :
getSupportActionBar().setLogo(R.drawable.logo)
Ich habe es gewohnt AppBarLayout
und ImageButton
getan.
<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>
Mein Java-Code:
findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
Sie können dies auch methodisch erreichen:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
Stellen Sie in Ihrem XML app:titleMargin
Folgendes in Ihrer Symbolleistenansicht ein:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:titleMarginStart="16dp"/>
Oder in Ihrem Code:
toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom
Diese Arbeit für mich, um dem Titel eine Auffüllung hinzuzufügen, und für das ActionBar
Symbol habe ich das programmgesteuert festgelegt.
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
" "
Fügen Sie einfach Ihren App-Namen hinzu. Es wird ein Leerzeichen zwischen Symbol und Titel hinzugefügt