2012-12-11 3 views
10

내 목표는 세로 모드의 경우 높이를 ActionBar 높이는 것입니다. 내 Themes.xml에 actionBarSize탐색 탭이있는 ActionBar가 화면 방향으로 높이가 변경됩니다.

: 저는 현재

안드로이드를 설정합니다.

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <style name="DayTheme" parent="android:style/Theme.Holo.Light"> 
     <item name="android:actionBarSize">@dimen/actionBarHeight</item> 
     <item name="android:actionBarTabTextStyle">@style/tab_indicator_text_dark</item> 
    </style> 
    <style name="NightTheme" parent="android:style/Theme.Holo"> 
     <item name="android:actionBarSize">@dimen/actionBarHeight</item> 
     <item name="android:actionBarTabTextStyle">@style/tab_indicator_text_light</item> 
    </style> 
</resources> 

은 내가 80dp에 ActionBar 높이를 증가 가로 모드에서 원하는 효과를 얻을.

enter image description here

그러나, 나는 높이가과 같이 변경 세로 모드로 화면을 회전했다.

enter image description here

주 나는 코드에서 다음 호출을합니다.

final ActionBar bar = getActionBar(); 
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
bar.setDisplayShowTitleEnabled(false); 
bar.setDisplayShowHomeEnabled(false); 

나는 안드로이드 4.2와 함께 Nexus 7에서 개발 중입니다.

가로 모드에서 세로 모드로 동일한 80dp 높이를 얻으려면 어떻게해야합니까?

+0

동일한 문제가 발생했습니다. 또한 "반사 해킹"을 사용하여 작업 표시 줄에 포함 된 탭을 강제로 사용하고 있는지 궁금합니다. – mdelolmo

답변

10

당신이 쓴 :

어떻게 내가 가로 모드가 세로 모드에서 동일한 80dp 높이를받을 수 있나요? 모두Application 테마 속성을 설정하여

android:actionBarSize 80 딥에 ActionBar.TabView 스타일 속성 android:minHeight (또는 height).

기본 예 : 매니페스트에

<style name="ThemeHoloWithActionBar" parent="android:Theme.Holo.Light"> 
    <item name="android:actionBarTabStyle">@style/ActionBarTabStyle</item> 
    <item name="android:actionBarSize">80dip</item> 
</style> 

<style name="ActionBarTabStyle" parent="@android:style/Widget.Holo.ActionBar.TabView"> 
    <item name="android:minHeight">80dip</item> 
</style> 

설정 테마 :

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/ThemeHoloWithActionBar" > 

이 활동의 ​​액션 바 일부 탭을 추가

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ActionBar actionbar = getActionBar(); 
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    actionbar.setDisplayShowTitleEnabled(false); 
    actionbar.setDisplayShowHomeEnabled(false); 
    ActionBar.Tab tabA = actionbar.newTab().setText("Tab A"); 
    ActionBar.Tab tabB = actionbar.newTab().setText("Tab B"); 
    ActionBar.Tab tabC = actionbar.newTab().setText("Tab C"); 

    tabA.setTabListener(new MyTabsListener()); 
    tabB.setTabListener(new MyTabsListener()); 
    tabC.setTabListener(new MyTabsListener()); 

    actionbar.addTab(tabA); 
    actionbar.addTab(tabB); 
    actionbar.addTab(tabC); 
} 

이 80 딥 탭을 생산 세로 모드의 높이 :

가로 모드에서 80 딥 높이 363,210

enter image description here

및 탭 :

enter image description here

EDIT이 예에서는

매니페스트에 SDK 버전이 설정된 행 :

android:minSdkVersion="12" 
android:targetSdkVersion="15" 

OP에 따르면이 예제는 다음과 같이 작동합니다. 이러한 SDK 설정. 그러나 targetSkdVersion 대신 16 또는 17로 설정하면 예제가 작동하지 않습니다. OP가 제출했습니다 bug report:

+1

새로운 샘플 프로젝트에서 제안을 시도했습니다. 내 넥서스 7과 에뮬레이터에서 실행했습니다. 세로 모드에서의 신장 사진과 같은 결과물도 제작되지 않았습니다. 세로 모드의 경우 높이가 가로 모드의 높이보다 여전히 낮습니다. – ericharlow

+0

https://github.com/GunnarKarlsson/TabHeightTest에 github 프로젝트로 업로드했습니다. 넥서스 7에서 예상되는 결과를 얻으려면 시도해보십시오. 내 스크린 샷은 4.03을 실행하는 갤럭시 S2에서였습니다. –

+2

프로젝트에 감사드립니다. 그래서 프로젝트와 나의 차이점은 AndroidManifest.xml에 있습니다. skd 버전을 16 또는 17로 변경하면 작업이 중지됩니다. 나는 안드로이드 팀에 버그 보고서를 제출할 것입니다. – ericharlow