Android:アクションバーのカスタムレイアウトから左マージンを削除する


269

私はカスタムアクションバービューを使用しており、下のスクリーンショットに示すように、アクションバーに空白の灰色のスペースがあります。削除したい。

ここに画像の説明を入力してください

私が何をした:

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>

マニフェスト

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

主な活動

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);
}

私は最近の投稿を見つけました、それは最新のリリースに問題があることを指摘しています。また、ADTとSDKをAndroid 5に更新しました。

Android ActionBarのカスタムビューが親を満たさない

どうすればいいかわかりません。

編集(部分的なソリューション):

Android <= API 10では動作しません。

Android Lollipop、AppCompat ActionBarカスタムビューが画面全体の幅を占めない

何を変更したか:

最新のSDKバージョンを使用します。

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

を追加toolbarStyle

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


1
@Zbarceaそれは私の終わりでは機能しません。android:toolbarStyle IDEの場合、apiレベル21が必要であるという苦情は11分です。このソリューションはuで機能しますか?
プログラマー、

回答:


609

ToolbarXML経由で追加する場合は、XML属性を追加するだけでコンテンツインセットを削除できます。

<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" />

2
xmlns:app = " schemas.android.com/apk/res-auto "は、xmlの「app」部分が欠落しているすべての人に提供されます。
Prakash

3
"app:"と "android:" ..の違いは何ですか?
マイクロ

3
それらは異なる名前空間です。「android」名前空間は、伝統的にAndroid OSで定義されたすべての属性に使用されます。「app」名前空間は、ライブラリをインポートするか、attrs.xmlファイルに独自の名前空間を追加することにより、アプリによって定義される属性に従来から使用されています。名前空間の「ハンドル」は任意の名前にできることに注意してください。ルートレイアウトのxmlns属性を使用して定義されます。この場合は、レイアウト要素自体に定義されます。必要に応じて、「xmlns:nougat」にすることもできます。つまり、Androidデータバインディングでは、通常、bindingAdaptersに「バインド」を使用します。
LukeWaggoner、2016年

@idratherbeintheairツールバーに検索ビューがありますが、可視性を使用して非表示にすると、境界は検索ビューの境界を意味し、ツールバーにはまだ境界線の種類が表示されています。それについて何か考えはありますか?
ジェイラソッドRJ 2016

24
私の場合、この属性をandroid.support.v7.widget.Toolbar:のデザインxmlに追加するapp:contentInsetStartWithNavigation="0dp"だけで十分です。
コンピューティング

198

これを試して:

    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);

私は私のプロジェクトでこのコードを使用しました。


4
優れた!parent.setContentInsetsAbsolute(0,0)がトリックを行います!
バム

7
これは機能します。ただし、レイアウトが多少変更される可能性があります。または、actionBar.setCustomView(R.layout.app_title_bar); Toolbar parent =(Toolbar) actionBar.getCustomView().getParent(); parent.setContentInsetsAbsolute(0,0);レイアウトを大きくするのではなく、行うことができます。
Markymark 2015

私にはうまくいきませんが、私の問題はわずかに異なります。
Solace 2015

関数setContentInsetsAbsoluteは、SDK> 21の場合にのみサポートされます。任意の解決策
Pramod J George、2015

11
parent.setPadding(0, 0, 0, 0);タブレットにも追加する必要がありました
Alexandre G

47

左側の挿入図は、ツールバーcontentInsetStartがデフォルトで16 dpであることが原因です。

これを変更してキーラインに揃えます。

サポートライブラリv24.0.0の更新:

マテリアルデザインの仕様と一致させるためにcontentInsetStartWithNavigation、デフォルトで16 dpの追加属性があります。ナビゲーションアイコンもある場合は、これを変更します。

これは、デザインライブラリのバージョン24で導入された新しいマテリアルデザイン仕様の一部であることが判明しました。

https://material.google.com/patterns/navigation.html

ただし、ツールバーウィジェットに次のプロパティを追加することにより、余分なスペースを削除することが可能です。

app:contentInsetStartWithNavigation="0dp"

前 : ここに画像の説明を入力してください

後: ここに画像の説明を入力してください


このソリューションは、Android Jetpack(androidx)を使用して私のために機能したものです
Francisc0

27

次のコードに従って、toolbarStyleを変更する別の解決策(参照appcompat-v7)を見つけました。

<item name="toolbarStyle">@style/Widget.Toolbar</item>


<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>

手伝っていただけるなら、このstackoverflow.com/questions/31359608/…をご覧ください。
Prashant Kedia

私は確認してあなたに
知って

14
<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">

これで十分です。


11

あなたのstyles.xmlを修正するだけです

<!-- ActionBar styles -->
    <style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
        <item name="contentInsetStart">0dp</item>
        <item name="contentInsetEnd">0dp</item>
    </style>

8

レイアウトにツールバーを追加する代わりに、以下に示すようにカスタムビューを設定できます。

Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);

7

app:contentInsetStart="0dp"ツールバーに追加するだけで、その左側のスペースが削除されます。

ツールバーの定義は次のようになります

 <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">

そしてそれはこのように見えます

ここに画像の説明を入力してください


4

使用してAppCompatAcitivtyあなただけで使用することができます

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);

3

ツールバーにこの行app2:contentInsetStart = "0dp"を追加する必要があります

<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"/>

2
私にとっては app:contentInsetStart="0dp"
Adil Soomro 2017年

1

問題の解決策(最初の写真)はどこにも見つかりませんでしたが、数時間掘り下げた後、ようやく最も簡単な解決策が見つかりました。次のような多くのxml属性で試したことに注意してくださいapp:setInsetLeft="0dp"などの、この場合はどれも役に立ちませんでした。

写真1 ここに画像の説明を入力してください

次のコードは、図2のようにこの問題を解決しました

@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);
}

写真2

ここに画像の説明を入力してください


1

ツールバーで「contentInset ...」属性を0に設定しても機能しませんでした。スタイルを更新するNilesh Sentaのソリューションが機能しました!

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);

0

次のようなツールバーを作成します。

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

詳細については、このリンクに従ってください-Androidのヒント


0

android:padding="0dp"仕事を追加するだけ

<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">

0
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);

0

xmlファイルのツールバービューグループ内の相対レイアウトを使用して、必要に応じてウィジェットの位置を調整できます。カスタムレイアウトを作成してインフレートしてツールバーにアタッチする必要はありません。Javaコードで完了したら、レイアウトのサポートアクションバーとして設定する前に、ツールバーオブジェクトでsetContentInsetsAbsolute(0,0)を使用します。


0

カスタマイズされたアクションバーの背景色と一致するように、アプリのアクションバーのスタイルに背景アイテムを追加することをお勧めします。

<item name="android:background">@color/actionbar_bgcolor</item>

Android 6.0以降では、アクションバーに右マージンのスペースがあり、設定できません。このようなアクティビティで調整する右マージンを追加します(ビューはカスタマイズされたアクションバーまたはその中の右ボタンです)

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);

actionbar machenismはAndroid 3.0以降のアプリでサポートされています。代わりに(サポートライブラリv7の)ツールバーを使用する場合は、各アクティビティの各xmlにそれをレイアウトし、Android 5.0以降のデバイスのシステムステータスバーと重複する問題に対処する必要があります。


0

コトリン

    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)

0

この仕事は私にとって

toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);

0

ツールバーのドキュメントを確認すると、デフォルトでスタイルが定義されており、アイテムcontentInsetStartがあります。

<item name="contentInsetStart">16dp</item>

このパディングをオーバーライドしたい場合は、2つの方法で行うことができます。

1.スタイルをオーバーライドし、contentInsetStartとcontentInsetEndの値で独自のスタイルを追加します。

<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
    <item name="contentInsetStart">0dp</item>
    <item name="contentInsetEnd">0dp</item>
</style>

2. XMLでは、contentInsetStartおよびcontentInsetEndの値を直接定義できます。

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

-1

アプリはAndroid 5をサポートしていますか?サポートされていない場合は、サポートアクションバーv7のバージョンをダウングレードできます。それは次のようになります:

'com.android.support:appcompat-v7:19.0.+'をコンパイルします(v7:21+は使用しないでください)

また、アプリケーションのターゲットバージョンを21未満にします。

targetSdkVersion 14

アプリがAndroid 5をサポートしている場合->カスタムツールバーが必要になります。(appcombat-v7:21に変更があるため)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.