minimumScreenWidthDp用于3.2之前的设备?

时间:2012-04-20 00:21:15

标签: android android-layout android-fragments

从阅读支持多种屏幕尺寸的文档开始,从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();
        }
    }
}

2 个答案:

答案 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对象。

换句话说: 没有(不幸的是)没有其他选择......