0

나는 지난 2 주 동안 쟁점을 해결할 수있는 신뢰할만한 솔루션을 찾기 위해 애를 먹었습니다. Google의 Android 앱에서는 배경 이미지를 사용합니다. 이 이미지에는 몇 가지 경계가있어 서로 다른 시각을 배치해야합니다. 응용 프로그램을 4.0에서 최신 버전으로 지원해야합니다. 내가 직면 한 문제는 다음과 같습니다.kitkat를 지원할 때 안드로이드 UI 정렬 문제

내비게이션 막대가있는 기기에 앱을 설치하면 완벽 해 보이지만 탐색 바가없는 기기에서 앱을 실행하면 정렬이 어지럽게됩니다.

나는 무엇을 시도 했습니까? OS 버전이 18 (4.3)인지 확인하고 각 활동에 대해 두 개의 레이아웃을 만들고 설치했는지 확인했습니다. 코드는 여기

if (DEVICE_API_VERSION > 17) { 
    setContentView(R.layout.layoutwithnavigationbar); 
      } else { 
    setContentView(R.layout.layoutnonavigationbar); 
      } 

입니다 그러나 4.4.2로 업그레이드하고 더 탐색 모음이없는 삼성 갤럭시 노트 II와 같은 장치가 있습니다.

다음 절차를 시도했습니다.

boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); 
    boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME); 
    boolean hasMenuKey = ViewConfiguration.get(mContext).hasPermanentMenuKey(); 
    System.out.println("has back key . . . . "+hasBackKey); 
    System.out.println("has home key . . . . "+hasHomeKey); 
    System.out.println("has menu key . . . . " + hasMenuKey); 
      if(hasHomeKey || hasBackKey) { 
       setContentView(R.layout.layoutnonavigationbar); 
      } else { 
       setContentView(R.layout.layoutwithnavigationbar); 
      } 

그러나 나는 다시 운이 없었습니다. 안드로이드, xhdpi의 4.1.2 버전 인 sony xperia sl에서 탐색 모음이없는 레이아웃을 완벽하게 선택하지만 sony xperia m2에서 hasBackKey가 탐색 모음이 있고 하드웨어 메뉴 버튼이없는 경우에도 true를 반환합니다. 내비게이션 막대가없는 레이아웃을 선택하고 레이아웃이보기 흉하게 보입니다. 심지어 탐색 바의 리소스 ID와 같은 몇 가지를 시도했지만 하드웨어 버튼과 탐색 바가없는 htc에는 탐색 바에 대한 리소스 ID가 있습니다. 그래서 그것은 작동하지 않았다. 아래에 표시된 것과 같은 리소스 ID가 있습니다.

int resourceId = resources.getIdentifier("navigation_bar_height", 
       "dimen", "android"); 

누구에게이 문제가 있습니까? 어리석은 일이나 누락 된 일이 있습니까?

내가 찾고있는 것은?

1) 내 앱은 4.0에서 최신 버전까지 작동해야합니다.

2) 모든 장치에 탐색 모음이있는 경우 UI가 영향을받지 않거나 다른 더 좋은 해결책이 될 수 있도록 완전히 투명하게 만들고 그 아래의 화면을 사용할 수도 있습니다.

3) 장치에 탐색 모음이 있는지 또는 하드웨어 단추를 사용 하는지를 알 수있는 표준 방법이 있는지 알고 싶습니까?

4) Kitkat을 사용하기 전에 장치에서 탐색 모음을 투명하게 만들려면 어떻게해야합니까?

참고 : 앱은 가로 모드에만 있습니다. 투명한 탐색 모음 테마를 사용해 보았지만 키트 킷에서만 지원됩니다. 나는 값 - hdpi, 값 -xhdpi, 요법을 사용하여 UI를 다른 장치에 정렬시킵니다.

해결책 찾기를 도와주세요.

답변

0

마지막으로 많은 연구 끝에 안정적인 솔루션을 찾을 수 없었습니다. 표준 방법인지는 모르겠지만 내 목적을 달성했습니다. 나는 stackoverflow 질문에 대답을 사용.실제 폭과 디스플레이 폭이 동일한 경우

get real size of screen 그것이 디바이스가 탐색 바없는 의미 다음

DisplayMetrics displayMetrics = new DisplayMetrics(); 
     d.getMetrics(displayMetrics); 

     int displayHeight = displayMetrics.heightPixels; 
     int displayWidth = displayMetrics.widthPixels; 

를 이용하여도 화면의 표시 크기를 얻었다 다른 장치는 내비게이션 바있다. 따라서 적절한 레이아웃을 설정하고 있습니다. 내 응용 프로그램은 가로 모드에서만 실행되므로 너비에만 관심이 있습니다.