我想知道如何根据设备是平板电脑还是手机来改变活动的主题。我有一个具有@android:style/Theme.Black.NoTitleBar
主题的设置活动。在平板电脑上,我喜欢这个活动的主题是@android:style/Theme.Dialog
我在Manifest.xml文件中选择了活动的主题,但是我可以看到这个清单文件没有平板电脑版本?
如何更改此活动的主题?我也可以更改其他一些活动的主题以隐藏操作栏。
答案 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;
}
}