Ich verwende eine benutzerdefinierte Aktionsleistenansicht. Wie Sie in der Abbildung unten sehen können, befindet sich in der Aktionsleiste ein leerer grauer Bereich. Ich möchte es entfernen.
Was habe ich gemacht:
res/values-v11/styles.xml
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
<item name="Android:actionBarStyle">@style/ActionBarStyle</item>
<item name="actionBarStyle">@style/ActionBarStyle</item>
</style>
res/values / my_custom_actionbar.xml
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
<item name="Android:height">60dp</item>
</style>
</resources>
Manifest
<uses-sdk
Android:minSdkVersion="10"
Android:targetSdkVersion="19" />
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/AppName"
Android:theme="@style/AppBaseTheme" >
<!-- activities... etc -->
</application>
Hauptaktivität
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
ActionBar actionbar = getSupportActionBar();
actionbar.setDefaultDisplayHomeAsUpEnabled(false);
actionbar.setDisplayHomeAsUpEnabled(false);
actionbar.setDisplayShowCustomEnabled(true);
actionbar.setDisplayShowHomeEnabled(false);
actionbar.setDisplayShowTitleEnabled(false);
actionbar.setDisplayUseLogoEnabled(false);
actionbar.setHomeButtonEnabled(false);
// Add the custom layout
View view = LayoutInflater.from(this).inflate(R.layout.actionbar, null, false);
actionbar.setCustomView(view);
}
Ich habe einen kürzlich veröffentlichten Beitrag gefunden, der darauf hinweist, dass ein Problem mit der neuesten Version vorliegt. Ich habe auch ADT und SDK auf Android 5 aktualisiert.
Benutzerdefinierte Ansicht von Android ActionBar füllt nicht das übergeordnete Element
Ich weiß nicht was ich tun soll.
Bearbeiten (Teillösung):
Funktioniert nicht auf Android <= API 10.
Was habe ich geändert:
Verwenden Sie die neueste Sdk-Version:
<uses-sdk
Android:minSdkVersion="10"
Android:targetSdkVersion="21" />
Fügen Sie eine toolbarStyle
hinzu:
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
<item name="Android:actionBarStyle">@style/ActionBarStyle</item>
<item name="actionBarStyle">@style/ActionBarStyle</item>
<item name="Android:toolbarStyle">@style/ToolbarStyle</item>
<item name="toolbarStyle">@style/ToolbarStyle</item>
</style>
<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
<item name="Android:contentInsetStart">0dp</item>
</style>
Wenn Sie die Toolbar
über XML hinzufügen, können Sie einfach XML-Attribute hinzufügen, um Inhaltseinsätze zu entfernen.
<Android.support.v7.widget.Toolbar
xmlns:app="schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/primaryColor"
Android:contentInsetLeft="0dp"
Android:contentInsetStart="0dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
Android:contentInsetRight="0dp"
Android:contentInsetEnd="0dp"
app:contentInsetRight="0dp"
app:contentInsetEnd="0dp" />
versuche dies:
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
View customView = getLayoutInflater().inflate(R.layout.main_action_bar, null);
actionBar.setCustomView(customView);
Toolbar parent =(Toolbar) customView.getParent();
parent.setPadding(0,0,0,0);//for tab otherwise give space in tab
parent.setContentInsetsAbsolute(0,0);
Ich habe diesen Code in meinem Projekt verwendet, viel Glück;
Die linke Einfügung wird durch contentInsetStart
der Symbolleiste verursacht, die standardmäßig 16dp ist.
Ändern Sie dies, um sich an der Keylinie auszurichten.
Update für die Support-Bibliothek v24.0.0:
Zum Abgleichen der Material Design-Spezifikation gibt es ein zusätzliches Attribut contentInsetStartWithNavigation
, das standardmäßig 16dp ist. Ändern Sie dies, wenn Sie auch ein Navigationssymbol haben.
Es stellte sich heraus, dass dies Teil einer neuen Material-Design-Spezifikation ist, die in Version 24 der Design-Bibliothek eingeführt wurde.
https://material.google.com/patterns/navigation.html
Es ist jedoch möglich, den zusätzlichen Speicherplatz zu entfernen, indem Sie dem Toolbar-Widget die folgende Eigenschaft hinzufügen.
app:contentInsetStartWithNavigation="0dp"
Ich habe eine andere Auflösung gefunden (Referenz appcompat-v7), die den toolbarStyle mit folgendem Code ändert:
<item name="toolbarStyle">@style/Widget.Toolbar</item>
<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
Android:paddingLeft="0dp">
Das sollte gut genug sein.
Ändern Sie einfach Ihre styles.xml
<!-- ActionBar styles -->
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
Anstatt eine Symbolleiste im Layout hinzuzufügen, können Sie Ihre benutzerdefinierte Ansicht wie folgt einstellen.
Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);
Fügen Sie der Symbolleiste nur app:contentInsetStart="0dp"
hinzu, um den verbleibenden Platz zu entfernen.
Ihre Toolbar-Definition sieht also so aus
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
app:contentInsetStart="0dp"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
und es sieht so aus
Sie müssen diese Zeile app2 hinzufügen: contentInsetStart = "0dp" in Ihrer Symbolleiste
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app2="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="@color/colorPrimary"
app2:contentInsetStart="0dp"/>
Mit AppCompatAcitivty
können Sie nur von
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
View logo = getLayoutInflater().inflate(R.layout.custom_toolbar, null);
mToolbar.addView(logo, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
mToolbar.setContentInsetsAbsolute(0,0);
Ich habe nirgendwo eine Lösung für mein Problem (erstes Bild) gefunden, aber am Ende habe ich nach ein paar Stunden Graben eine einfachste Lösung. Bitte beachten Sie, dass ich viele xml-Attribute wie app:setInsetLeft="0dp"
usw. ausprobiert habe, aber in diesem Fall hat keiner von ihnen geholfen.
der folgende Code hat dieses Problem wie in Abbildung 2 gelöst
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//NOTE THAT: THE PART SOLVED THE PROBLEM.
Android.support.design.widget.AppBarLayout abl = (AppBarLayout)
findViewById(R.id.app_bar_main_app_bar_layout);
abl.setPadding(0,0,0,0);
}
Bild 2
Das Setzen von "contentInset ..." -Attributen in der Symbolleiste auf 0 hat für mich nicht funktioniert. Nilesh Sentas Lösung zur Aktualisierung des Stils funktionierte!
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarStyle">@style/Actionbar</item>
<item name="Android:titleTextStyle">@style/ActionbarTitle</item>
</style>
<style name="Actionbar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
Java (onCreate)
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT
);
View view = LayoutInflater.from(this).inflate(R.layout.actionbar_main, null);
actionBar.setCustomView(view, layoutParams);
Werkzeugleiste wie folgt erstellen:
<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/menuToolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="0dp"
Android:background="@color/white"
Android:contentInsetLeft="10dp"
Android:contentInsetRight="10dp"
Android:contentInsetStart="10dp"
Android:minHeight="?attr/actionBarSize"
Android:padding="0dp"
app:contentInsetLeft="10dp"
app:contentInsetRight="10dp"
app:contentInsetStart="10dp"></Android.support.v7.widget.Toolbar>
bitte folgen Sie diesem Link für mehr - Android-Tipps
ActionBar ab = getSupportActionBar();
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayShowCustomEnabled(true);
setDisplayShowTitleEnabled(true);
View customView = getLayoutInflater().inflate(R.layout.activity_main,null); //here activity_main.xml is the GUI design file.
ab.setCustomView(customView);
Toolbar parent =(Toolbar) customView.getParent(); //use V7 Toolbar import
parent.setContentInsetsAbsolute(0, 0);
setPadding(5,0,0,0);
ab.setIcon(R.mipmap.ic_launcher);
Es ist besser, ein Hintergrundelement in den Stil der App-Aktionsleiste aufzunehmen, um der Hintergrundfarbe der benutzerdefinierten Aktionsleiste zu entsprechen:
<item name="Android:background">@color/actionbar_bgcolor</item>
Nach Android 6.0 verfügt die Aktionsleiste sogar über ein Leerzeichen rechts und kann nicht festgelegt werden. Fügen Sie einen rechten Rand hinzu, der in der Aktivität wie folgt angepasst wird: aussicht ist die angepasste Aktionsleiste oder eine rechte Schaltfläche darin)
int rightMargin = Build.VERSION.SDK_INT>=Build.VERSION_CODES.M ? 0 : 8; // may the same with actionbar leftMargin in px
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
p.setMargins(p.leftMargin, p.topMargin, rightMargin, p.bottomMargin);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
p.setMarginEnd(rightMargin);
}
view.setLayoutParams(p);
Der actionbar machenism wird nur nach der Android 3.0+ App unterstützt. Wenn wir stattdessen eine Symbolleiste (der Unterstützung von lib v7) verwenden, sollten wir sie in jeder XML-Datei jeder Aktivität anordnen und das Problem der Überlappung mit der Systemstatusleiste auf dem Android 5.0-Gerät oder höher beheben.
hinzufügen von Android:padding="0dp"
Arbeit für mich
<Android.support.v7.widget.Toolbar
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="60dp"
Android:padding="0dp"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
Die richtige und einfachste Antwort lautet auf einen anderen Beitrag:
Android Lollipop, AppCompat ActionBar-Ansicht nimmt nicht die gesamte Bildschirmbreite ein
Es ist als richtig markiert und nachdem ich es versucht habe, kann ich bestätigen, dass es funktioniert.
Sie können das relative Layout innerhalb der Symbolleisten-Ansichtsgruppe einfach in Ihrer XML-Datei verwenden und die Positionen der Widgets nach Bedarf für Ihren Anwendungsfall anpassen. Wenn Sie dies in Ihrem Java-Code getan haben, verwenden Sie setContentInsetsAbsolute (0,0) mit Ihrem Symbolleistenobjekt, bevor Sie es als Unterstützungsaktionsleiste in Ihrem Layout festlegen.
Kotlin
supportActionBar?.displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM;
supportActionBar?.setCustomView(R.layout.actionbar);
val parent = supportActionBar?.customView?.parent as Toolbar
parent?.setPadding(0, 0, 0, 0)//for tab otherwise give space in tab
parent?.setContentInsetsAbsolute(0, 0)
diese Arbeit für mich
toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);