3

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

2 回答 2

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。

于 2012-10-11T11:29:00.750 回答
0

正如你已经说过的,“SmallestScreenWidthDp”(http://developer.android.com/guide/practices/screens_support.html)是 3.2 及以上版本的最佳选择。3.2 之前的设备你可以像你一样使用配置对象。

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

于 2012-04-23T12:59:03.697 回答