Android: verwijder linkermarge van de aangepaste lay-out van de actiebalk

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.

voer hier de afbeeldingsbeschrijving in

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.

Android Lollipop, AppCompat ActionBar aangepaste weergave neemt niet de volledige schermbreedte in beslag

Wat heb ik veranderd:

Gebruik de nieuwste SDK-versie:

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="21" />

Voeg een toolbarStyletoe:

<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 Toolbarvia 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 contentInsetStartvan 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 contentInsetStartWithNavigationdat 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"

Vóór:
voer hier de afbeeldingsbeschrijving in

Na :
voer hier de afbeeldingsbeschrijving in


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

voer hier de afbeeldingsbeschrijving in


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 AppCompatAcitivtydie 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.

Other episodes