根据设备是Android平板电脑还是手机,使用不同的主题

时间:2011-11-16 08:35:09

标签: android

我想知道如何根据设备是平板电脑还是手机来改变活动的主题。我有一个具有@android:style/Theme.Black.NoTitleBar主题的设置活动。在平板电脑上,我喜欢这个活动的主题是@android:style/Theme.Dialog

我在Manifest.xml文件中选择了活动的主题,但是我可以看到这个清单文件没有平板电脑版本?

如何更改此活动的主题?我也可以更改其他一些活动的主题以隐藏操作栏。

2 个答案:

答案 0 :(得分:10)

您可以在s tyle resource file中描述自定义主题(可能只指向默认主题),然后在Manifest中引用该主题。

然后,您可以根据某些条件提供alternative resources(就像使用不同密度的drawable一样,但现在您可以指定最小屏幕尺寸或API级别)。

Manifext:

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

RES /值/ styles.xml:

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

RES /值-V11 / styles.xml:

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

答案 1 :(得分: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;
    }

}