2011-11-16 1 views
6

기기가 태블릿인지 휴대 전화인지에 따라 활동 주제를 어떻게 바꿀 수 있는지 궁금합니다. 나는 그것에 @android:style/Theme.Black.NoTitleBar 테마를 가지고 설정 활동이 있습니다. 타블렛에서이 활동의 ​​테마를 좋아할 것입니다. @android:style/Theme.Dialog기기가 안드로이드 타블렛인지 전화인지에 따라 다른 테마를 사용하십시오.

Manifest.xml 파일에서 액티비티 테마를 선택했는데이 매니페스트 파일의 타블렛 버전이 없습니다.

이 활동의 ​​테마를 어떻게 바꿀 수 있습니까? 액션 바를 감추기 위해 다른 활동들에 대한 주제를 바꿀 수도 있습니다.

답변

9

당신은 동적으로 설정할 수 있습니다 다음과 같은 각 활동 내부 :

protected void onCreate(Bundle icicle) { 

    super.onCreate(icicle); 

    // ... 

    // Call setTheme before creation of any(!) View. 

    if(isTablet()) { 
     setTheme(android.R.style.Black); 
    } 
    else { 
     setTheme(android.R.style.Theme_Dark); 
    }  
    // ... 

    setContentView(R.layout.main); 
} 

이제 isTablet 메서드가 필요하지만 장치 유형을 감지하는 것은 약간 어렵습니다. 여기에 온라인으로 볼 수있는 방법은, 그것은 화면 크기를 확인하고 화면이 큰 경우는 현재 장치가 태블릿 : 아이디어에 대한

public boolean isTablet() { 
    try { 
     // Compute screen size 
     DisplayMetrics dm = context.getResources().getDisplayMetrics(); 
     float screenWidth = dm.widthPixels/dm.xdpi; 
     float screenHeight = dm.heightPixels/dm.ydpi; 
     double size = Math.sqrt(Math.pow(screenWidth, 2) + 
           Math.pow(screenHeight, 2)); 
     // Tablet devices should have a screen size greater than 6 inches 
     return size >= 6; 
    } catch(Throwable t) { 
     Log.error(TAG_LOG, "Failed to compute screen size", t); 
     return false; 
    } 

} 
+0

고마워, 그 perfekt 일했습니다! – Georg

10

tyle resource file에 사용자 지정 테마 (단순히 기본 테마를 가리킬 수 있음)를 설명하고 해당 테마를 Manifest에서 참조 할 수 있습니다.

그런 다음 몇 가지 기준에 따라 alternative resources을 제공 할 수 있습니다 (다른 밀도의 드로어 블과 유사하지만 이제는 최소 화면 크기 또는 API 레벨을 지정합니다).

Manifext :

<application android:theme="@style/CustomTheme"> 

고해상도/값/styles.xml :

<style name="CustomTheme" parent="android:Theme.Black.NoTitleBar" /> 

고해상도/값-V11/styles.xml :

<style name="CustomTheme" parent="android:Theme.Dialog" /> 
+0

감사합니다 가정합니다. 주된 문제는 장치가 태블릿인지 아닌지에 따라 특정 활동을 대화 상자 또는 전체 화면 활동으로만 바꾸기를 원합니다. 전화에서 활동은 탭 막대에, 태블릿에서는 대화 상자에 있습니다. 당신의 솔루션으로 나는 그것을 어떻게 성취 할 수 있는지 알지 못합니다. – Georg

+1

@Georg : 특정 요소에 대해 android : theme을 지정하려고 할 수 있습니다. – ron

+0

각 활동마다 테마를 사용해야하고, xlarge/style.xml에있는 태블릿에 필요한 것을 "오버라이드"한다는 의미입니까? – Georg

관련 문제