【问题标题】:How to start an activity depending on screen size?如何根据屏幕大小启动活动?
【发布时间】:2013-05-10 22:00:17
【问题描述】:

所以,如果我的屏幕尺寸是 mdpi 或 hdpi,我会检查我的 main_activity 类,并根据我需要在我的游戏活动中启动适当的方法。我的数据库中有两个表,其中包含 mdpi 和 hdpi 图像。但我什么也得不到。只有我空白的主要活动。有什么问题?这是我的主要活动:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

            Display display = getWindowManager().getDefaultDisplay(); 
            int width = display.getWidth();
            int height = display.getHeight();

            if((width>320) && (width<480)){
                Intent i = new Intent(MainActivity.this, GameDanska.class);
                i.putExtra("myMethod", "nextQuestionMDPI");
                startActivity(i);

            }
            else if((width>480) && (width<720)){
                Intent i2 = new Intent(MainActivity.this, GameDanska.class);
                i2.putExtra("myMethod", "nextQuestionHDPI");
                startActivity(i2);
            }

    }

【问题讨论】:

  • 通过打印宽度值来检查
  • 我怀疑 width==0。
  • 你检查过你的屏幕分辨率吗?您只允许宽度 321->479 和 481->719。这些都是非常奇怪的决议。例如我的 GNex 有 1280x720,所以完全超出了您允许的范围。
  • 我建议您通过执行this, look the answer with a switch 之类的操作来检查设备上的密度,然后开始您想要的活动。
  • 我的屏幕是 320X480。我百分百确定。这是宏达魔术。 @Marc B我只检查宽度,而不是高度。我检查只是为了检查它是 mdpi 还是 hdpi,宽度就足够了。

标签: java android sqlite


【解决方案1】:

如下使用开关

Intent i = new Intent(this, GameDanska.class);

switch (getResources().getDisplayMetrics().densityDpi) {
    case DisplayMetrics.DENSITY_MEDIUM:
        i.putExtra("myMethod", "nextQuestionMDPI");
        startActivity(i);
        break;
    default:
        i.putExtra("myMethod", "nextQuestionHDPI");
        startActivity(i);
        break;
}

如果您的应用仅适用于 MDPI、HDPI、XHDPI,请记住将屏幕兼容性放在 manifest.xml 文件中。

<compatible-screens>
    <screen android:screenSize=["small" | "normal" | "large" | "xlarge"]
            android:screenDensity=["ldpi" | "mdpi" | "hdpi" | "xhdpi"] />
    ...
</compatible-screens>

你的情况

 <compatible-screens>
    <screen android:screenSize="small" android:screenDensity="mdpi"/>
    <screen android:screenSize="small" android:screenDensity="hdpi"/>
    <screen android:screenSize="small" android:screenDensity="xhdpi"/>

    <screen android:screenSize="normal" android:screenDensity="mdpi"/>
    <screen android:screenSize="normal" android:screenDensity="hdpi"/>
    <screen android:screenSize="normal" android:screenDensity="xhdpi"/>

    <screen android:screenSize="large" android:screenDensity="mdpi"/>
    <screen android:screenSize="large" android:screenDensity="hdpi"/>
    <screen android:screenSize="large" android:screenDensity="xhdpi"/>

    <screen android:screenSize="xlarge" android:screenDensity="mdpi"/>
    <screen android:screenSize="xlarge" android:screenDensity="hdpi"/>
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi"/>
 </compatible-screens>

API Screen reference

Switch reference

【讨论】:

【解决方案2】:

似乎这样可以解决问题,您可以使用 Configuration.screenLayout 位掩码。

例子:

if ((getResources().getConfiguration().screenLayout & 
    Configuration.SCREENLAYOUT_SIZE_MASK) == 
        Configuration.SCREENLAYOUT_SIZE_LARGE) {
    // on a large screen device ...

}

【讨论】:

    【解决方案3】:

    您可以直接将图像放入 res->mdpi,hdpi,xhdpi,ldpi 文件夹中

    for ldpi 320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc)

    for mdpi 480dp: a tweener tablet like the Streak (480x800 mdpi).

    for hdpi 600dp: a 7” tablet (600x1024 mdpi).

    for xhdpi 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 2016-05-22
      • 2015-07-16
      相关资源
      最近更新 更多