Android 가상 버튼 이 동적 레이아웃 조정 에 적합 한 방법

3191 단어 Android가상버튼
최근 프로젝트 에서 화 웨 이의 가상 버튼 이 잘 어 울 리 는 문제 에 부 딪 혔 습 니 다.홈 페이지 는 RecylerView(아래 그림)입 니 다.만약 에 잘 어 울 리 지 않 으 면 화면 초기 화 를 마 친 후에 가상 버튼 은 페이지 를 가리 거나 여백 부분 을 비 웁 니 다.이 문제 에 대해 인터넷 에서 자 료 를 찾 아 다음 과 같은 방법 을 정 리 했 습 니 다.

첫 페이지 아래 부분 은 RecylerView 입 니 다.
첫 페이지 하단 부분 은 RecylerView 입 니 다.
가상 키 전환 감청
등록 시스템 방송

getContentResolver().registerContentObserver(Settings.System.getUriFor("navigationbar_is_min"), true, mNavigationStatusObserver);

private ContentObserver mNavigationStatusObserver = new ContentObserver(new Handler()) {
    @Override
    public void onChange(boolean selfChange) {
      int navigationBarIsMin = Settings.System.getInt(getContentResolver(),
          "navigationbar_is_min", 0);
      if (navigationBarIsMin == 1) {//      
        Log.e("      ", "-----");
        gridView_Home.getViewTreeObserver().addOnGlobalLayoutListener(HomeActivity.this);
      } else {//      
        Log.e("      ", "-----");
        gridView_Home.getViewTreeObserver().addOnGlobalLayoutListener(HomeActivity.this);
      }
    }
  };
View 에 전역 레이아웃 모니터 추가
가상 버튼 이 전환 되 었 을 때 view 의 getView TreeObserver().addOnGlobalLayoutListener 를 호출 하여 view 에 전체 레이아웃 모니터 를 설정 하고 현재 view 가 표시 할 수 있 는 실제 높이 를 가 져 온 다음 높이 에 따라 하위 item 의 높이 를 동적 으로 설정 합 니 다.
레이아웃 모니터 의 리 셋
리 셋 에서 RecylerView 가 표시 할 수 있 는 실제 높이 를 측정 합 니 다.

 @Override
  public void onGlobalLayout() {
    refreshGridViewHeight();
  }
이 반전 은 여러 번 호출 될 수 있 습 니 다.높이 를 얻 은 후에 이 감청 을 제거 해 야 합 니 다.그렇지 않 으 면 인터페이스 가 끊 길 수 있 습 니 다.

private void refreshGridViewHeight() {
    gridView_Home.post(new Runnable() {
      @Override
      public void run() {
        //         ,     
        int height = gridView_Home.getHeight();
        //               ,        
        final int itemHeight = height / 3 - 3;
        runOnUiThread(new Runnable() {
          @Override
          public void run() {
            homeMenuAdapter.setIemtHeight(itemHeight);
            gridView_Home.setAdapter(homeMenuAdapter);
            mPresenter.refushGridData();
            if (Build.VERSION.SDK_INT < 16) {
              gridView_Home.getViewTreeObserver().removeGlobalOnLayoutListener(HomeActivity.this);
            } else {
              gridView_Home.getViewTreeObserver().removeOnGlobalLayoutListener(HomeActivity.this);
            }
          }
        });
      }
    });
이 레이아웃 감청 을 제거 하 는 방법 은 낮은 버 전 을 호 환 해 야 하기 때문에 상황 을 나 누 어 코드 를 구체 적 으로 봐 야 한다.
마지막 으로 Activity 의 onDestroy 나 인터페이스 가 삭 제 된 곳 에서 방금 설 치 된 시스템 방송 수신 자 를 로그아웃 하 는 것 을 기억 하 세 요.

getContentResolver().unregisterContentObserver(mNavigationStatusObserver);
이상 의 안 드 로 이 드 가상 버튼 이 동적 으로 레이아웃 을 조정 하 는 방법 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기