Андроид: удалить слева от пользовательские верхней панели макета


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

что я сделал:

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>

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

Android леденец, совместимости приложений панели быстрого доступа настраиваемый вид не занимает весь экран шириной

что я изменился:

используйте последнюю версию 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>
20 183

20 ответов:

Если вы добавляете 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" />

попробуйте это:

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

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

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

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

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

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

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

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

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

app:contentInsetStartWithNavigation="0dp"

перед : enter image description here

после : enter image description here

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

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


<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
<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">

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

просто измените свои стили.xml

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

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

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

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

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

enter image description here

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

вам нужно добавить эту строку 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"/>

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

Рисунок 1 enter image description here

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

enter image description here

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

Android леденец, совместимости приложений панели быстрого доступа настраиваемый вид не занимает весь экран шириной

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

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

<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 Советы

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

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

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

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

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

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

в верхней панели machenism просто поддерживается после версии Android 3.0+ приложение. Если вместо этого мы используем панель инструментов (поддержка lib v7), мы должны разместить ее в каждом xml каждого действия и позаботиться о проблеме перекрытия с системной строкой состояния в устройстве Android 5.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)

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

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

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

compile ' com.андроид.поддержка: appcompat-v7: 19.0.+' (Не используйте v7:21+)

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

targetSdkVersion 14

Если ваше приложение поддерживает android 5 - > вам понадобится пользовательская панель инструментов. (Потому что appcombat-v7:21 есть некоторые изменение.)