2014-12-08 1 views
151

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

enter image description here

Что я сделал:

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

Рез/значения/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's custom view not filling parent

Я не знаю, что я должен делать.

Edit (частичное решение):

Не работает на Android < = API 10.

Android Lollipop, AppCompat ActionBar custom view doesn't take up whole screen width

Что я изменил:

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

есть у видел [это сообщение] (HTTP: //stackoverflow.com/questions/26433409/android-lollipop-appcompat-actionbar-custom-view-doesnt-take-up-whole-screen-w) – kId

+0

@Zbarcea Его не работает на моем конце. и для android: жалобы на панели инструментов IDS IDE требуют, чтобы уровень api 21 мин равен 11. Является ли это решение для u? – Programmer

ответ

344

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

Это лучший ответ для XML-макета, StackOverFlow должен добавить опцию «2-й правильный ответ» LOL – JiratPasuksmit

+2

xmlns: app = "http://schemas.android.com/apk/res-auto" для всем, кто не хватает «приложения» в xml. – Prakash

+0

@Prakash Действительно, хороший улов! – LukeWaggoner

179

попробовать это:

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

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

+0

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

+1

Отлично! parent.setContentInsetsAbsolute (0,0) делает трюк! – Bam

+7

Это работает. Тем не менее, он может немного изменить макет. В качестве альтернативы вы можете сделать «actionBar.setCustomView (R.layout.app_title_bar);' 'Панели инструментов parent = (Панель инструментов) actionBar.getCustomView(). GetParent();' 'parent.setContentInsetsAbsolute (0,0);' вместо того, чтобы раздувать расположение. – Markymark

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

Пожалуйста, взгляните на это http://stackoverflow.com/questions/31359608/android-setting-default-style-for-edittext-view-is-not-working, если бы вы могли мне помочь. –

+0

Я проверю и дам вам konw –

-1

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

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

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

targetSdkVersion 14

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

6

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

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

Просто Измените styles.xml

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

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

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

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

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

3

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

0

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

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

После андроида 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); 

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

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"/> 
+0

Для меня это было 'app: contentInsetStart =" 0dp "' –

19

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

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

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

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

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

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

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

app:contentInsetStartWithNavigation="0dp" 

До: enter image description here

После: enter image description here

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

я не нашел решение для моей проблеме (первая картинка) anywh но, наконец, я получил в итоге простейшее решение после нескольких часов рытья. Обратите внимание, что я пробовал много атрибутов 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

 Смежные вопросы

  • Нет связанных вопросов^_^