2012-03-13 4 views
0

여러 개의 다른 화면 크기를 지원하는 응용 프로그램을 개발 중입니다. 나는 타블렛과 전화를 위해 다른 디자인을 가지고있다. 목록 조각과 웹 조각이 태블릿에 있습니다. 전화기에 목록 조각이 있습니다. 내 요구 사항은 사용자가 목록보기를 클릭하면 태블릿 인 경우 데이터를 새로 고쳐야하고 휴대 전화 인 경우 다음 활동으로 이동해야한다는 것입니다.사용자가 android에서 태블릿 또는 휴대 전화를 사용하고 있는지 확인하는 방법

아무에게도이 작업을 수행 할 수 있습니까?

감사

+0

http://stackoverflow.com/questions/5832368/testt-or-phone-android –

+0

간단한 대답은 여기에서 찾을 수 있습니다 : http://stackoverflow.com/a/9308284/1750829 –

답변

0

그럼 당신이 이런 식으로 작업을 수행 할 수 있습니다

private boolean isTabletDevice() { 
if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb 
    // test screen size, use reflection because isLayoutSizeAtLeast is only available since 11 
    Configuration con = getResources().getConfiguration(); 
    try { 
    Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class); 
    Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE 
    return r; 
    } catch (Exception x) { 
    x.printStackTrace(); 
    return false; 
    } 
} 
return false; 
} 

아이디어 단지했다 API 레벨을 확인하지만, 향후 태블릿과 스마트 폰이 같은 안드로이드 버전을 사용할 수 있습니다 (그들이 때문에 ICS로 시작하는 스마트 폰 버전과 병합 된 태블릿 버전), 이는 좋은 생각이 아닙니다.

낮은 수준의 Android 기기 API 레벨 < 9가 화면 해상도를 확인하는 데 필요한 메소드를 지원하지 않기 때문에 다음 과제는 리플렉션과 호환되는 코드를 만드는 것입니다.

행운을 빌어 요, 화면의 크기에 Arkde

1

은 내가 생각 :

private boolean isTablet() 
{ 
    Display display = getWindowManager().getDefaultDisplay(); 
    DisplayMetrics displayMetrics = new DisplayMetrics(); 
    display.getMetrics(displayMetrics); 

    int width = displayMetrics.widthPixels/displayMetrics.densityDpi; 
    int height = displayMetrics.heightPixels/displayMetrics.densityDpi; 

    double screenDiagonal = Math.sqrt(width * width + height * height); 
    return (screenDiagonal >= 9.0); 
} 
+0

9 인치 이상을 확인합니까? – waqaslam

+0

예, 장치가 맞으면 true를 반환합니다. –

+0

정확하지 않은 densityDPI 값을 반환하는 일부 장치에서는이 옵션이 작동하지 않습니다. 예를 들어 일부 장치는 실제 DPI가 많이 다를 때 160을보고 할 수 있습니다. – SkolVikingsGuy

1

레이아웃 대형, 레이아웃 초대형 및 레이아웃의 레이아웃 파일에 다른 ID를 정의합니다.

고해상도/레이아웃

<FrameLayout android:id="@+id/normal>...</FrameLayout> 

고해상도/레이아웃 큰

<FrameLayout android:id="@+id/large>...</FrameLayout> 

이 태블릿 또는 전화 (태블릿은 안드로이드 2.2 전화 수를 실행 할 수 없습니다 바랍니다 여부를 검출하기 위해 ID를 사용하여 4.0을 실행하면 이것이 가장 좋은 방법입니다.)

+0

id를 사용하여 어떤 ID인지 확인하면 특정 레이아웃 구성 요소가 있는지 확인 하시겠습니까? like : findViewById (R.id.fragment_container) == null; ? – fersarr

관련 문제