Android 몰입 식 상태 표시 줄 과 화 웨 이 가상 버튼 충돌 문제 해결

현재 의 App 에 있어 레이아웃 페이지 는 기본적으로 몰입 식 상태 표시 줄 을 사용 합 니 다.단순 한 몰입 식 상태 표시 줄 은 쉽게 해결 할 수 있 지만 화 웨 이 핸드폰 에 밑 에 가상 버튼 이 존재 하 는 문제 로 인해 페이지 밑 과 윗부분 에 큰 문제 가 발생 할 수 있 습 니 다.예 를 들 어 페이지 밑 에 네 비게 이 션 표시 줄 이 버튼 으로 덮어 져 서 밑 에 조작 할 수 없습니다.상단 상태 표시 줄 의 배치 가 높 게 버 티 고 못 생 긴 것 을 직시 할 수 없습니다.여기 서 이들 의 충돌 문 제 를 함께 해결 합 니 다!먼저 실 현 된 효과 도 를 살 펴 보 자.
这里写图片描述
이것 은 제 핸드폰 입 니 다.OnePlus 3T 7.1.1 버 전(무료 광고,돈 을 주지 않 았 군요)은 화 웨 이의 핸드폰 이 아 닙 니 다.하지만 가상 버튼 을 설정 할 수 있 습 니 다.밑 에 있 는 네 비게 이 션 바 에 문제 가 없고 상단 상태 표시 줄 도 성공 적 으로 실현 되 었 습 니 다.효과 도 를 보고 다음 에 바로 차 를 몰 았 습 니 다.
홈 페이지 레이아웃:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="com.example.statusbarvirtualkey.statusbarvirtualkey.MainActivity">
 <RelativeLayout
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <include
 android:id="@+id/home_title"
 layout="@layout/layout_home_title" />
 <FrameLayout
 android:id="@+id/home_container"
 android:layout_width="match_parent"
 android:layout_height="0dp"
 android:layout_alignParentTop="true"
 android:layout_marginTop="70dp"
 android:layout_above="@+id/line_bottom"
 android:layout_weight="1"
 >
 </FrameLayout>
 <View
 android:id="@+id/line_bottom"
 android:layout_width="match_parent"
 android:layout_height="0.5dp"
 android:alpha="0.6"
 android:layout_above="@+id/bottom_navigation_view"
 android:background="@android:color/darker_gray"
 />
 <android.support.design.widget.BottomNavigationView
 android:id="@+id/bottom_navigation_view"
 android:layout_width="match_parent"
 android:layout_height="50dp"
 android:layout_alignParentBottom="true"
 app:itemBackground="@android:color/white"
 app:elevation="2dp"
 app:itemTextColor="@color/selector_item_color"
 app:itemIconTint="@color/selector_item_color"
 app:menu="@menu/navigation_menu"
 >
 </android.support.design.widget.BottomNavigationView>
 </RelativeLayout>
</RelativeLayout>
아래쪽 네 비게 이 션 표시 줄 은 BottomNavigation View 를 사용 합 니 다.AndroidStudio 가 직접 도입 합 니 다.이것 은 이 글 의 중점 부분 이 아니 기 때문에 상세 한 소 개 를 하지 않 습 니 다.구체 적 인 실현 을 보고 싶 으 면 제 소스 코드 를 볼 수 있 습 니 다.상단 은 사용자 정의 Toolbar 입 니 다.코드 는 다음 과 같 습 니 다.

<?xml version="1.0" encoding="utf-8"?>
<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/myToolBar"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:background="@drawable/layer_list_bottom_line"
 android:padding="@dimen/titleBarPadding"
 android:elevation="@dimen/primary_shadow_height"
 android:clipToPadding="true"
 android:fitsSystemWindows="true"
 app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
 <RelativeLayout
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <TextView
 android:id="@+id/home_left"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_centerVertical="true"
 android:drawableLeft="@mipmap/ind_icon_fan"
 android:drawablePadding="5dp"
 android:padding="@dimen/dp_4" />
 <TextView
 android:id="@+id/home_right"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentEnd="true"
 android:layout_alignParentRight="true"
 android:layout_centerVertical="true"
 android:ellipsize="end"
 android:singleLine="true"
 android:maxEms="5"
 android:textColor="@android:color/black"
 android:textSize="7.0sp"
 android:typeface="monospace" />
 <TextView
 android:id="@+id/toolbar_title"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_centerInParent="true"
 android:singleLine="true"
 android:text="@string/app_name"
 android:textColor="@android:color/white"
 android:textSize="20sp" />
 </RelativeLayout>
</android.support.v7.widget.Toolbar>
주의해 야 할 것 은 Android:fitsSystem Windows 라 는 속성 입 니 다.주로 현재 이 속성 을 설정 한 view 의 padding 을 조정 하여 statusbar 공간 을 남 겨 두 고 쓰 지 않 으 면 구조 에 심각 한 문제 가 생 길 수 있 으 므 로 쓰 지 않 는 결 과 를 스스로 시험 할 수 있 습 니 다.
기본 레이아웃 을 소개 합 니 다.다음은 몰입 식 상태 표시 줄 을 어떻게 설정 합 니까?AndroidManifest 레이아웃 에서 테 마 를 설정 합 니 다.

<application
 android:allowBackup="true"
 android:icon="@mipmap/ic_launcher"
 android:label="@string/app_name"
 android:roundIcon="@mipmap/ic_launcher_round"
 android:supportsRtl="true"
 android:theme="@style/AppTheme">
 <activity android:name=".MainActivity">
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
 </activity>
 </application>
여기 서 주의해 야 할 것 은 3 개의 폴 더 를 설정 해 야 합 니 다.각각 안 드 로 이 드 버 전이 일치 하지 않 습 니 다.values,values-v19,values-v21,values 디 렉 터 리 에서 설정 해 야 합 니 다.

<style name="AppTheme" parent="@style/BaseAppTheme">
 </style>
 <style name="BaseAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
 <item name="colorPrimary">@color/colorPrimary</item>
 <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 <item name="colorAccent">@color/colorAccent</item>
 </style>
values-v19:

<style name="AppTheme" parent="@style/BaseAppTheme">
 <item name="android:windowTranslucentStatus">true</item>
 <item name="android:windowTranslucentNavigation">false</item>
 </style>
values-v21:

<style name="AppTheme" parent="BaseAppTheme">
 <item name="android:statusBarColor">@color/colorPrimary</item>
 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
 </style>
주의 하 세 요.다음은 Activity 의 중점 작업 입 니 다.여기에 중점 코드 만 붙 이 는 방법 을 소개 합 니 다.onCreate 방법:

@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 toolbar_title = (TextView) findViewById(R.id.toolbar_title);
 //         BaseActivity  
 highApiEffects();
 mToolBar = (Toolbar) getWindow().findViewById(R.id.home_title);
 setSupportActionBar(mToolBar);
 }
@TargetApi(Build.VERSION_CODES.KITKAT)
 private void highApiEffects() {
 getWindow().getDecorView().setFitsSystemWindows(true);
 //      @  
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
 //      @         ,                         (    )    ,      
// getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
 }
고에너지 경고!!!이 코드 천!만!아니!네!가!!!넣 으 면 충돌 이 야!여기까지 몰입 식 상태 표시 줄 과 아래쪽 가상 버튼 의 충돌 문제 가 해결 되 었 다.
마지막 으로 제 핸드폰 세 개 를 붙 인 몰입 식 상태 표시 줄 캡 처,4.4 의 핸드폰 이 없습니다.(사실은 시 뮬 레이 터 를 켜 기 가 귀 찮 습 니 다.)죄 송 하지만 붙 일 수 없습니다.여 기 는 각각:
Android 4.2.2,몰입 하지 않 은 상태:
这里写图片描述
Android 5.1:
这里写图片描述
Android 7.1.1,아래쪽 에 가상 버튼 이 있 습 니 다.즉,이 글 의 주제 입 니 다.
这里写图片描述
원본 코드 다운로드
위 에서 말 한 것 은 안 드 로 이 드 몰입 식 상태 표시 줄 과 화 웨 이 가상 버튼 의 충돌 문 제 를 해결 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기