2017-02-21 11 views
1

실제 결과 : 작업 표시 줄에 Toolbar 상태 표시 줄이 나타나고 작업 표시 줄의 MenuItem이 잘립니다. 참고 : '테스트'는 작업 표시 줄의 title입니다.투명한 상태 표시 줄이 작업 표시 줄과 겹침

JankActionBar

예상 결과 : 은 작업 표시 줄 Toolbar의 경계 상단 상태 표시 줄의 경계 바닥 바로 아래에 표시해야하며, 작업 표시 줄 내부에 MenuItem의 완전히 볼 수 있어야합니다.

활동의 XML 레이아웃 :

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/layout_root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/image_background" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scaleType="centerCrop" 
     android:src="@drawable/background" 
     tools:ignore="ContentDescription"/> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/action_bar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@android:color/transparent" 
     android:fitsSystemWindows="true" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

</FrameLayout> 

작업 표시 줄 titleMenuItem 런타임에 추가됩니다. 나는 Toolbar보기 fitsSystemWindows="true"를 추가하기 전에

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.test); 

    setSupportActionBar((Toolbar) findViewById(R.id.action_bar)); 
    ActionBar actionBar = getSupportActionBar(); 
    assert actionBar != null; 
    actionBar.setDisplayHomeAsUpEnabled(false); 
    actionBar.setTitle("Test"); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_test, menu); 
    return true; 
} 

는 상태 표시 줄은 여전히 ​​작업 표시 줄을 오버레이하지만, 'SKIP'MenuItem는 수직으로 상태 표시 줄 아래에 부분적으로 표시하는 원인이 작업 표시 줄의 중앙에 있었다. fitsSystemWindows=true 플래그가 내 기대 결과 (위에서 언급 한)를 제공 할 것으로 기대했지만 그렇지 않았습니다. fitsSystemWindows="true"이 '건너 뛰기'버튼의 위치를 ​​올바르게 지정했지만 액션 바 자체의 위치는 조정하지 않은 것과 같습니다. 누구든지 여기에 무슨 문제가 있을지 알고 있습니까?

편집 : 나는 fitsSystemWindows="true"를 제거하고 Toolbar보기에 marginTop="...statusBarHeight"를 추가 할 수 있습니다 실현,하지만 난이 문제를 해결하기 위해 깨끗한 방법을 찾고 있어요.

+0

전체 레이아웃 파일을 공유 할 수 있습니까? 및 레이아웃 미리보기 이미지? 나는 테스트를 볼 수없고 레이아웃에서 버튼 코드를 건너 뛸 수있다. – rahul

+0

이 다른 레이아웃 일입니까? –

+0

@rahul, 아마도 Ryan이 xml이 아닌 프로그래밍 방식으로 제목과 메뉴 항목을 추가합니다. –

답변

0

도구 모음AppBarLayout으로 옮겨보십시오. 이처럼

:

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

<android.support.v7.widget.Toolbar 
     android:id="@+id/action_bar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@android:color/transparent" 
     android:fitsSystemWindows="true" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

<AppBarLayout/> 
3

내 문제는 설정 나 때문이었다 Toolbarlayout_height?attr/actionBarSize합니다. 원래는 fitsSystemWindows의 위치가 변경되어 Toolbar으로 변경되었지만 대신 패딩이 추가 된 것으로 보입니다. 따라서 위쪽 패딩이 Toolbar에 추가되면 Toolbar의 내용이 푸시 다운됩니다. Toolbar의 높이가 고정되어 있으므로 내용이 컨테이너 아래쪽 아래로 밀려납니다. 나는이 문제를 해결하기 위해 ToolbarminHeight 속성 값으로 ?attr/actionBarSize을 설정했다. 다음은 내 Toolbar 업데이트됩니다

<android.support.v7.widget.Toolbar 
    android:id="@+id/action_bar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/actionBarSize" 
    android:background="@android:color/transparent" 
    android:fitsSystemWindows="true" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

주의 할 : 하나 또는 다른 이유에 대해 직접 작업 표시 줄의 높이부터 작업 표시 줄 아래에 아무것도 표시하고자하지 않는 경우이 작동, 약 2 배 높이 홈 아이콘, 제목 및/또는 메뉴 항목의 한 줄을 포함해야한다는 것입니다. 비 중첩 상태 표시 줄과 정상 크기 작업 표시 줄을 달성 할 수있는 방법을 알고 있다면 통찰력을 공유하십시오. 나는 영원히 감사 할 것입니다.

HugeActionBar

주의 할 업데이트 : 좋아. 그래서 내 행동 바는 내 Activity의 테마에 <item name="android:windowTranslucentNavigation">true</item>을 설정했기 때문에 내비게이션 막대의 높이와 동일한 추가, 아래쪽 패딩을 받았다. windowTranslucentNavigation 속성을 제거하여이 사실을 확인했습니다. 나는 안드로이드 지원 라이브러리 v25.1.1을 사용하여 7.1 픽셀에서 이것을 테스트하고 있습니다.

+0

경고를 추가했습니다 ... – Ryan

+1

이 해결책은 'layout_height' ='? attr/actionBarSize'가있는 정상 크기 작업 표시 줄이 필요한 화면에는 존재하지 않습니다. 나는 이것에 대한 해결책을 찾지 못했다. :/ – Ryan

+0

상태 바를 반투명하게 유지하는 데 도움이 된 것은 (도구 모음과 거의 같은 색), 올바른 크기의 도구 모음은 모든 활동 내용을 XML의 코디네이터 레이아웃에 넣는 것이 었습니다. – shtolik