Я использую пользовательское представление панели действий, и, как вы можете видеть на скриншоте ниже, в панели действий есть пустое серое пространство. Я хочу удалить его.
Что я сделал:
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>
Если вы добавляете 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 библиотеки Design.
https://material.google.com/patterns/navigation.html
Однако можно удалить дополнительное пространство, добавив следующее свойство в виджет панели инструментов.
app:contentInsetStartWithNavigation="0dp"
До:
После:
Я нашел другое разрешение (ссылка 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>
<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">
Это должно быть достаточно хорошо.
Просто измените ваши styles.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">
и это выглядит так
Вам нужно добавить эту строку 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"/>
app:contentInsetStart="0dp"
Используя 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);
Я не нашел решение для своей проблемы (первое изображение) в любом месте, но, наконец, я получил самое простое решение после нескольких часов рытья. Обратите внимание, что я пробовал с большим количеством атрибутов 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
Установка атрибутов "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);
эта работа для меня
toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(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)
Лучше добавить элемент фона в стиль панели действий приложения в соответствии с цветом фона настраиваемой панели действий:
<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 или более поздней версии.
Вы можете просто использовать относительный макет внутри группы просмотра панели инструментов в вашем XML файле и отрегулировать позиции виджетов по мере необходимости для вашего случая использования. Не нужно создавать настраиваемый макет, раздувать его и прикреплять к панели инструментов. После выполнения кода java используйте setContentInsetsAbsolute (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"/>
Его выглядит так здорово, см. изображение
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);
добавляет только 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">
Создайте панель инструментов следующим образом:
<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 Lollipop, приложение AppCompat ActionBar не занимает всю ширину экрана
Он помечен как правильный, и после того, как я попробовал это, я могу подтвердить, что он работает.
Поддерживает ли ваше приложение андроид 5? Если вы не поддерживаете, вы можете понизить версию панели поддержки поддержки v7. Это выглядит так:
compile 'com.android.support:appcompat-v7:19.0.+' (Не используйте v7: 21 +)
также делает целевую версию приложения менее 21.
targetSdkVersion 14
Если ваше приложение поддерживает Android 5 → , вам понадобится пользовательская панель инструментов. (Becuase appcombat-v7: 21 имеют некоторые изменения).