Андроид: удалить слева от пользовательские верхней панели макета
Я использую пользовательский вид панели действий, и, как вы можете видеть на скриншоте ниже, в панели действий есть пустое серое пространство. Я хочу его удалить.
что я сделал:
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
что я изменился:
используйте последнюю версию 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 ответов:
Если вы добавляете
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"
Я нашел другое разрешение (ссылка 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">
и это выглядит так
используя
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"
и т. д.. но никто из них не помог в этом деле.следующий код решил эту проблему, как на рисунке 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
правильный и простой ответ на другой пост, вот так:
он помечен как правильный, и после того, как я попробовал, я могу подтвердить, что он работает.
Создать панель инструментов следующим образом:
<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)
поддерживает ли ваше приложение android 5 ? Если нет поддержки, то вы можете понизить версию поддержки actionbar v7. Это выглядит так:
compile ' com.андроид.поддержка: appcompat-v7: 19.0.+' (Не используйте v7:21+)
также сделать целевую версию приложения менее 21.
targetSdkVersion 14
Если ваше приложение поддерживает android 5 - > вам понадобится пользовательская панель инструментов. (Потому что appcombat-v7:21 есть некоторые изменение.)