2013-07-03 4 views
26

Я хотел бы изменить размер панели действий. Я пробовал следующую кодировку.Как изменить размер панели действий

<style name="MyTheme" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@style/CustomActionBar</item> 
</style> 
<style name="CustomActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> 
    <!-- <item name="android:background">@drawable/action_bar_style</item> --> 
    <item name="android:actionBarSize">15dp</item> 
    <item name="android:background">@drawable/header_bar</item> 
</style> 

Но размер панели действий не изменился. Есть ли другой способ? Я использую api level 11.

Thanks.

+0

'андроида: actionBarSize' работает для меня, но уровень API 21 –

ответ

70

Использовать атрибут height, actionBarSize если что-то еще.

<item name="android:height">@dimen/bar_height</item> 

Explanantion:

Из исходного кода ActionBar:

mContentHeight = a.getLayoutDimension(R.styleable.ActionBar_height, 0); 

Мы можем видеть, что R.styleable.ActionBar_height используется для высоты. Stylable Имена свойств генерируются как component_attribute (Если вы когда-либо использовали пользовательский вид stylable, вы бы это заметили). Следовательно, Actionbar - это имя компонента, а height - это имя используемого атрибута. Поскольку это системный атрибут, следовательно, он определен в пространстве имен android.

Update Декабрь-2014:

AppCompat library теперь предоставляется расширить поддержку последней ActionBar (или панель инструментов) и тема поддержки старых версий андроида. Ниже приведен пример такой темы приложения /res/values/styles.xml:

<resources> 

    <!-- Application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light"> 

     <!-- Main theme colors --> 
     <!-- your app branding color for the app bar --> 
     <item name="colorPrimary">@color/primary</item> 

     <!-- darker variant for the status bar and contextual app bars --> 
     <item name="colorPrimaryDark">@color/primary_dark</item> 

     <!-- theme UI controls like checkboxes and text fields --> 
     <!-- native widgets will now be "tinted" with accent color --> 
     <item name="colorAccent">@color/accent</item> 

     <!--Action bar style--> 
     <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item> 
     <item name="actionBarStyle">@style/AppTheme.ActionBar</item> 

    </style> 

    <style name="AppTheme.ActionBar" parent="Widget.AppCompat.Light.ActionBar"> 
     <item name="android:titleTextStyle">@style/AppTheme.ActionBar.TitleText</item> 
     <item name="titleTextStyle">@style/AppTheme.ActionBar.TitleText</item> 
     <item name="android:height">@dimen/bar_height</item> 
     <item name="height">@dimen/bar_height</item> 
    </style> 

    <style name="AppTheme.ActionBar.TitleText" parent="TextAppearance.AppCompat.Widget.ActionBar.Title"> 
     <item name="android:textSize">@dimen/bar_text_size</item> 
     <item name="android:textColor">@color/bar_text_color</item> 
    </style> 
</resources> 

Этот стиль теперь может быть установлен как приложение темы с помощью android:theme="@style/AppTheme" в <application> теге AndroidManifest.xml.

Обратите внимание на использовании повторяющихся записей

<item name="android:actionBarStyle"> 
<item name="actionBarStyle"> 

Те без android имен существует для поддержки как библиотеки совместимости и родную attributes.Some этих атрибутов не существует под андроидом имен на более старые версии и принадлежат библиотеке поддержки.

В некоторых других местах вам нужно использовать app пространство имен (xmlns:app="http://schemas.android.com/apk/res-auto"), например app:showAsAction="always" в меню xml-файлов.

обновление Апрель 2015

AppCompat Library v22 также доступен. Прочитайте статью, чтобы узнать, что нового.

+1

@ user1156041 пожалуйста, вы можете уточнить мне этот LOC: mContentHeight = a.getLayoutDimension (R.styleable.ActionBar_height, 0); что такое mcontentHeight, a и т. д. Я новичок, столкнувшийся с трудностями для использования этого – nida

+0

. Я сделал выше, но все же высота панели действий по-прежнему исправлена. – dsharew

+0

@ S.D. Он не работает на Android 2.3 ... любое предложение, чтобы заставить его работать на Android 2.3 ??? – akkilis

2

Убедитесь, что добавить код S.D. к styles.xml, а затем добавить

android:theme="@style/thin_ab" 

к <application> элемента в главном манифеста. (Я ноб, и мне потребовалось около 2 часов, чтобы это выяснить.)

2

Добавьте к этому пользовательские темы в стиле XML, который вы ссылаетесь из вашего файла манифеста:

<item name="android:windowTitleSize">58dip</item> 

Например, если ваш файл манифеста выглядит примерно так:

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     **android:theme="@style/AppTheme"** > 

Ваш стиль темы должно быть как минимум:

<!-- Application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme">    
     <item name="android:windowTitleSize">54dip</item> 
    </style> 
1

Решение SD для меня не работает. б/у AppCompat v-21 библиотека в моем случае. И я просто добавить

android:layout_height="@dimen/actionBarSize" 
android:minHeight="@dimen/actionBarSize" 

в мой файл макета, и это работает.

+0

Спасибо, только это решение работает для меня. – kar

10

Проще говоря actionBarSize пункт в стиле MyTheme, как это:

<style name="MyTheme" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:actionBarSize">15dp</item> 
    <item name="actionBarSize">15dp</item> 
    ... 
</style> 

Объяснение:

В R.styleable мы видим, что R.styleable.Theme_actionBarSize является styleable атрибут, определенный на уровне темы.

Кроме того, из исходного кода res/values/styles.xml мы видим, как actionBarSize используются для установки height:

<style name="Widget.ActionBar"> 
    ... 
    <item name="android:height">?android:attr/actionBarSize</item> 
0

Есть два способа изменить размер панели действий. 1. использование файла манифеста.

android:theme="@style/AppTheme1" 

2.programatically лет можно использовать

public void onCreate(Bundle savedInstanceState) { 
setTheme(android.R.style.Theme); 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_second); 
}