Ik gebruik een aangepaste actiebalkweergave en zoals je kunt zien in de onderstaande schermafbeelding, is er een lege grijze ruimte in de actiebalk. Ik wil het verwijderen.
Wat heb ik gedaan:
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>
Hoofdactiviteit
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);
}
Ik heb een recent bericht gevonden dat erop wijst dat er een probleem is met de nieuwste release. Ik heb ook ADT en SDK geüpdatet naar Android 5.
Aangepaste weergave van Android ActionBar vult ouder niet
Ik weet niet wat ik moet doen.
Bewerken (deeloplossing):
Werkt niet op Android <= API 10.
Wat heb ik veranderd:
Gebruik de nieuwste SDK-versie:
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="21" />
Voeg een toolbarStyle
toe:
<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>
Antwoord 1, autoriteit 100%
Als u de Toolbar
via XML toevoegt, kunt u eenvoudig XML-attributen toevoegen om inhoudsinsets te verwijderen.
<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" />
Antwoord 2, autoriteit 29%
probeer dit:
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);
Ik heb deze code in mijn project gebruikt, veel succes;
Antwoord 3, autoriteit 8%
De linker inzet wordt veroorzaakt door contentInsetStart
van Toolbar, die standaard 16 dp is.
Verander dit zodat het overeenkomt met de hoofdlijn.
Update voor ondersteuningsbibliotheek v24.0.0:
Om aan de Material Design-specificatie te voldoen, is er een extra attribuut contentInsetStartWithNavigation
dat standaard 16 dp is. Wijzig dit als u ook een navigatiepictogram heeft.
Het bleek dat dit onderdeel is van een nieuwe Material Design-specificatie die is geïntroduceerd in versie 24 van de Design-bibliotheek.
https://material.google.com/patterns/navigation.html
Het is echter mogelijk om de extra ruimte te verwijderen door de volgende eigenschap toe te voegen aan de Toolbar-widget.
app:contentInsetStartWithNavigation="0dp"
Antwoord 4, autoriteit 4%
Ik heb een andere oplossing gevonden (referentie appcompat-v7 ) die de toolbarStyle ,volgend code:
<item name="toolbarStyle">@style/Widget.Toolbar</item>
<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
Antwoord 5, autoriteit 2%
<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">
Dit zou goed genoeg moeten zijn.
Antwoord 6, autoriteit 2%
Pas gewoon je styles.xml aan
<!-- ActionBar styles -->
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
Antwoord 7, autoriteit 2%
Voeg alleen app:contentInsetStart="0dp"
toe aan de werkbalk en verwijder de overgebleven ruimte.
Dus uw Toolbar-definitie ziet er als volgt uit
<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">
en het ziet er zo uit
Antwoord 8, autoriteit 2%
Voeg gewoon app:contentInsetStart="0dp"
toe aan het XML-kenmerk van de werkbalk.
Antwoord 9
In plaats van een werkbalk aan de lay-out toe te voegen, kunt u uw aangepaste weergave instellen zoals hieronder weergegeven.
Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);
Antwoord 10
Met behulp van AppCompatAcitivty
die u kunt gebruiken door
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);
Antwoord 11
Als u de documentatie van de werkbalk bekijkt, heeft deze standaard een stijl gedefinieerd en is er een item contentInsetStart.
<item name="contentInsetStart">16dp</item>
Als je deze opvulling wilt overschrijven, kan dat op twee manieren.
1.Overschrijf de stijl en voeg uw eigen stijl toe met contentInsetStart- en contentInsetEnd-waarden
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
2.In XML kunt u direct de contentInsetStart- en contentInsetEnd-waarden definiëren
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
android:layout_height="?attr/actionBarSize">
<!--Add your views here-->
</androidx.appcompat.widget.Toolbar>
Antwoord 12
Je moet deze regel app2:contentInsetStart=”0dp” toevoegen aan je werkbalk
<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"/>
Antwoord 13
dit werkt voor mij
toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);
Antwoord 14
U kunt gewoon de relatieve lay-out in de werkbalkweergavegroep in uw xml-bestand gebruiken en de posities van widgets aanpassen zoals u ze voor uw gebruik nodig hebt. U hoeft geen aangepaste lay-out te maken & blaas het op en bevestig het aan de werkbalk. Als u klaar bent in uw Java-code, gebruikt u setContentInsetsAbsolute(0,0) met uw werkbalkobject voordat u het instelt als ondersteuningsactiebalk in uw lay-out.
Antwoord 15
Het zou beter zijn om een achtergronditem toe te voegen aan de stijl van de app-actiebalk zodat deze consistent is met de achtergrondkleur van de aangepaste actiebalk:
<item name="android:background">@color/actionbar_bgcolor</item>
Na Android 6.0 heeft de actiebalk zelfs een ruimte rechts in de marge en kan deze niet worden ingesteld. Voeg als volgt een aanpassing van de rechtermarge toe aan de activiteit: (de weergaveis de aangepaste actiebalk of een rechterknop erin)
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);
Het actionbar-machenisme wordt net ondersteund na de Android 3.0+-app. Als we in plaats daarvan een werkbalk (met ondersteuning voor lib v7) gebruiken, moeten we deze in elke xml van elke activiteit opmaken en zorgen voor het probleem van overlapping met de systeemstatusbalk op het apparaat met Android 5.0 of hoger.