Android: убрать левое поле из пользовательского макета панели действий

202

Я использую пользовательское представление панели действий, и, как вы можете видеть на скриншоте ниже, в панели действий есть пустое серое пространство. Я хочу удалить его.

Изображение 317

Что я сделал:

RES/значение-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/значение/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>

MainActivity

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
    ты видел этот пост
  • 1
    @Zbarcea Это не работает на моем конце. и для андроида: toolbarStyle IDE жалобы на требуемый уровень API 21 мин равен 11. Работает ли это решение для вас?
Теги:
android-actionbar-compat

22 ответа

475
Лучший ответ

Если вы добавляете Toolbar через XML, вы можете просто добавить атрибуты 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 " для всех, кому не хватает части "app" в xml.
  • 0
    @Prakash Действительно, хороший улов!
Показать ещё 17 комментариев
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);

Я использовал этот код в своем проекте, удачи;

  • 1
    не работал для меня
  • 3
    Отлично! parent.setContentInsetsAbsolute (0,0) делает свое дело!
Показать ещё 12 комментариев
29

Левая вставка вызвана панелью инструментов contentInsetStart, которая по умолчанию равна 16dp.

Измените это, чтобы выровнять по клавише.

Обновление для библиотеки поддержки v24.0.0:

Чтобы соответствовать спецификации Material Design, существует дополнительный атрибут contentInsetStartWithNavigation, который по умолчанию равен 16dp. Измените это, если у вас также есть значок навигации.

Оказалось, что это часть новой спецификации дизайна материалов, представленной в версии 24 библиотеки Design.

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

Однако можно удалить дополнительное пространство, добавив следующее свойство в виджет панели инструментов.

app:contentInsetStartWithNavigation="0dp"

До: Изображение 4511

После: Изображение 4512

23

Я нашел другое разрешение (ссылка appcompat-v7), которые изменяют toolbarStyle, следующий код:

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


<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
  • 0
    Пожалуйста, посмотрите на этот stackoverflow.com/questions/31359608/… , если бы вы могли мне помочь.
  • 0
    я проверю и дам вам знать
13
<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">

Это должно быть достаточно хорошо.

8

Просто измените ваши styles.xml

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

Вместо добавления панели инструментов в макет вы можете настроить свой пользовательский вид, как показано ниже.

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

Добавьте только 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">

и это выглядит так

Изображение 4513

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

Используя 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);
1

Я не нашел решение для своей проблемы (первое изображение) в любом месте, но, наконец, я получил самое простое решение после нескольких часов рытья. Обратите внимание, что я пробовал с большим количеством атрибутов xml, таких как app:setInsetLeft="0dp" и т.д., Но ни один из них не помог в этом случае.

Фото 1 Изображение 4514

следующий код решил эту проблему, как на рисунке 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

Изображение 4515

  • 0
    setPadding с отрицательным значением решил мою проблему
0

Установка атрибутов "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

эта работа для меня

toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,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

Лучше добавить элемент фона в стиль панели действий приложения в соответствии с цветом фона настраиваемой панели действий:

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

После android 6.0, панель действий даже имеет свободное пространство справа и не может быть установлена. Добавьте корректировку правого поля в действие следующим образом: ( view - это настраиваемая панель действий или правая кнопка в ней)

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

Махинад панели действий поддерживается только после приложения Android 3.0+. Если мы используем панель инструментов (поддержки lib v7), мы должны поместить ее в каждый xml каждого действия и позаботиться о проблеме совпадения с панелью состояния системы на устройстве Android 5.0 или более поздней версии.

0

Вы можете просто использовать относительный макет внутри группы просмотра панели инструментов в вашем XML файле и отрегулировать позиции виджетов по мере необходимости для вашего случая использования. Не нужно создавать настраиваемый макет, раздувать его и прикреплять к панели инструментов. После выполнения кода java используйте setContentInsetsAbsolute (0,0) с вашим объектом панели инструментов, прежде чем устанавливать его в качестве панели действий поддержки в вашем макете.

0

Очень простой способ удаления левой панели панели инструментов используйте этот способ

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/toolbar_color"

android:layout_marginLeft="-20dp"/>

Его выглядит так здорово, см. изображение

Изображение 4516

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

добавляет только 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

Создайте панель инструментов следующим образом:

<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 Lollipop, приложение AppCompat ActionBar не занимает всю ширину экрана

Он помечен как правильный, и после того, как я попробовал это, я могу подтвердить, что он работает.

0

Поддерживает ли ваше приложение андроид 5? Если вы не поддерживаете, вы можете понизить версию панели поддержки поддержки v7. Это выглядит так:

compile 'com.android.support:appcompat-v7:19.0.+' (Не используйте v7: 21 +)

также делает целевую версию приложения менее 21.

targetSdkVersion 14

Если ваше приложение поддерживает Android 5 → , вам понадобится пользовательская панель инструментов. (Becuase appcombat-v7: 21 имеют некоторые изменения).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню