Пользовательское представление Android ActionBar не заполняет родительский

Аналогично вопросу здесь, но имеет некоторые ключевые отличия. Наиболее заметно, что принятый ответ действительно работал до тех пор, пока не будет выпущена последняя версия библиотеки поддержки.

Здесь пользовательский макет представления:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#FFDD0000">

</LinearLayout>

Теперь, когда вы пытаетесь установить только пользовательский вид:

  ActionBar actionBar = getSupportActionBar();
  actionBar.setDisplayShowCustomEnabled(true);
  actionBar.setCustomView(R.layout.actionbar);

В итоге вы получите настраиваемый макет, который не заполняет всю ширину: enter image description here

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

  ActionBar actionBar = getSupportActionBar();
  actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
  actionBar.setCustomView(R.layout.actionbar);
  actionBar.setDisplayHomeAsUpEnabled(false);
  actionBar.setHomeButtonEnabled(false);

Это работало, пока я не обновил библиотеки поддержки до версии v21. Как только я это сделал, я закончил с той же проблемой в приложениях, которые ранее не имели этой проблемы.

Итак, мой вопрос в том, есть ли способ, чтобы пользовательский экран действия отображал ширину с помощью последней библиотеки поддержки?

Изменить. После выполнения еще нескольких тестов я обнаружил, что компиляция с targetSdkVersion/compileSdkVersion установлена ​​в 19 и имеет v7: 19.0.1 (или v7: 19.1.0), для библиотеки нет эта проблема (есть домашняя иконка, о которой заботится более поздний код), подтверждая, что это определенно проблема с последней версией.

Ответ 1

 1  ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowTitleEnabled(false);
    View view = getLayoutInflater().inflate(R.layout.actionbar_title_back,
            null);
    LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT);
    actionBar.setCustomView(view, layoutParams);
    Toolbar parent = (Toolbar) view.getParent();
    parent.setContentInsetsAbsolute(0, 0);
2  Use Toolbar


        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("");
        mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
        mTitle.setText(title);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

<?xml version="1.0" encoding="utf-8"?>       
<LinearLayout 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="match_parent"
    android:orientation="vertical" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:popupBackground="@color/red"
        app:popupTheme="@style/PopupTheme"
        app:theme="@style/ToolbarTheme" >

        <TextView
            android:id="@+id/toolbar_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Toolbar Title"
            android:textColor="@color/white"
            android:textSize="17.0sp" />
    </android.support.v7.widget.Toolbar>
</LinearLayout>

Ответ 2

использование Панель инструментов parent = (панель инструментов) customNav.getParent();       parent.setContentInsetsAbsolute(0, 0); он будет работать

Ответ 3

добавить это в свой метод onCreate

 ActionBar action = getSupportActionBar();
        action.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);

 Toolbar toolbar=(Toolbar)action.getCustomView().getParent();
        toolbar.setContentInsetsAbsolute(0, 0);
        toolbar.getContentInsetEnd();
        toolbar.setPadding(0, 0, 0, 0);

Ответ 4

В свой XML-код добавьте следующие атрибуты:

<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/re_app_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:contentInsetEnd="0dp"
    android:contentInsetLeft="0dp"
    android:contentInsetRight="0dp"
    android:contentInsetStart="0dp"
    app:contentInsetEnd="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetStart="0dp">

он будет соответствовать всей ширине представления.