从阅读支持多种屏幕尺寸的文档开始,从Android 3.2开始,您可以使用smallestScreenWidthDp
有条件地设置布局,但3.2之前的设备有什么用?
我有一个基于片段的布局,如果屏幕尺寸大于600dp,我想在屏幕上显示两个片段。
这是我用来设置我想要替代的片段的代码:
public class MyActivity extends FragmentActivity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getResources().getConfiguration().smallestScreenWidthDp >= 600) {
finish();
return;
}
if (savedInstanceState == null) {
final DetailFragment details = new DetailFragment();
details.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
}
}
}
答案 0 :(得分:2)
以下是我使用的内容:
public static int getSmallestScreenWidthDp(Context context) {
Resources resources = context.getResources();
try {
Field field = Configuration.class.getDeclaredField("smallestScreenWidthDp");
return (Integer) field.get(resources.getConfiguration());
} catch (Exception e) {
// not perfect because reported screen size might not include status and button bars
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
int smallestScreenWidthPixels = Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels);
return Math.round(smallestScreenWidthPixels / displayMetrics.density);
}
}
不幸的是,它并不完美,因为DisplayMetrics中的屏幕尺寸可能不包括状态栏或软按钮。
例如,在我的Galaxy Tab 10.1上,实际值为800,而计算值仅为752。
答案 1 :(得分:0)
正如您所说,“SmallestScreenWidthDp”(http://developer.android.com/guide/practices/screens_support.html)是3.2及以上的最佳选择。 Pre 3.2设备你可以像你一样使用Configuration对象。
换句话说: 没有(不幸的是)没有其他选择......