2013-07-03 23 views
26

Chciałbym zmienić rozmiar paska akcji. Próbowałem następującego kodowania.Jak zmienić rozmiar paska czynności

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

Ale rozmiar paska akcji nie zmienił się. Czy istnieje inny sposób? Używam poziomu 11 api.

Dzięki.

+0

Android ': actionBarSize' pracuje dla mnie, ale poziom API 21 –

Odpowiedz

70

Użyj atrybutu height, actionBarSize, jeśli szukasz czegoś innego.

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

Explanantion:

z kodu źródłowego ActionBar:

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

Widzimy, że R.styleable.ActionBar_height jest używany do wysokości. Stylable nazwy właściwości są generowane jako component_attribute (Jeśli kiedykolwiek używałeś niestandardowego widoku stylable, zauważysz to). W związku z tym Actionbar jest nazwą komponentu, a height jest nazwą używanego atrybutu. Ponieważ jest to atrybut systemowy, dlatego zdefiniowano go w obszarze nazw android.

Aktualizacja gru-2014:

AppCompat library jest obecnie warunkiem przedłużenia wsparcia dla najnowszej ActionBar (lub paska narzędzi) oraz wsparcie motyw do starych wersji Androida. Poniżej znajduje się przykład takiego tematu aplikacji /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> 

Ten styl może być ustawiony jako motywu aplikacji za pomocą android:theme="@style/AppTheme" w <application> tagiem AndroidManifest.xml.

Uwaga stosowanie podwójnych wpisów

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

Te bez android nazw są tam do wspierania zarówno bibliotekę kompatybilność i natywną attributes.Some tych atrybutów nie istnieje w przestrzeni nazw android na starszych wersjach należą do biblioteki wsparcia. W niektórych innych miejscach należy użyć przestrzeni nazw app (xmlns:app="http://schemas.android.com/apk/res-auto"), na przykład app:showAsAction="always" w plikach menu xml.

Aktualizacja Kwi 2015

AppCompat Library v22 jest również dostępna. Przeczytaj ten artykuł, aby dowiedzieć się, co nowego.

+1

@ user1156041 można proszę mi opracować ten LOC mContentHeight = a.getLayoutDimension (R.styleable.ActionBar_height, 0); Czym jest mcontentHeight, itd. Jestem początkującym, który ma trudności z używaniem tego – nida

+0

Zrobiłem powyższe, ale wciąż wysokość paska akcji jest wciąż naprawiona. – dsharew

+0

@ S.D. Nie działa na systemie Android 2.3 ... żadnych sugestii, aby działało na systemie Android 2.3 ??? – akkilis

2

Upewnij się, aby dodać kod Š.D. do styles.xml a następnie dodać

android:theme="@style/thin_ab" 

do elementu <application> w głównym manifeście. (Jestem noobem i zajęło mi to około 2 godziny, żeby to odkryć.)

2

Dodaj do tego motywu niestandardowego stylu XML, że jesteś odwołującego z pliku manifestu:

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

Na przykład, jeśli plik manifestu wygląda mniej więcej tak:

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

Twój styl tematu powinieneś to lubić:

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

Rozwiązanie SD nie działa dla mnie. Użyłem biblioteki AppCompat v-21 w moim przypadku. A ja po prostu dodać

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

do mojego pliku układu i to działa.

+0

Dziękuję, tylko to rozwiązanie działa dla mnie. – kar

10

Upraszczając actionBarSize pozycję pod stylu Mytheme, tak:

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

Objaśnienie:

W R.styleable widzimy, że R.styleable.Theme_actionBarSize jest styleable atrybut zdefiniowany na poziomie rozrywki.

Również z kodu źródłowego res/values/styles.xml widzimy jak actionBarSize służy do ustawiania height:

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

Istnieją dwa sposoby, aby zmienić rozmiar paska akcji. 1.za pomocą pliku manifestu.

android:theme="@style/AppTheme1" 

2.programatically yo może używać

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