3

我正在开发一个应用程序,我需要在其中提供不同方向的不同活动的背景图像。所以我是这样接近的:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setLanguage();
    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
                 Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
                 // set background for landscape
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
               // set background for portrait
    }
}

android:configChanges="locale|orientation|screenSize"

并在onCreate()我为纵向设置背景图像时假设用户将启动应用程序并保持纵向模式。

一切正常,因为当用户改变他们的模式,设置相应的背景等等。

但是,如果用户在手机处于横向模式时启动此应用程序,因为它在第一次启动时显示为纵向图像,正如我在用户将以纵向模式启动应用程序之前所假设的那样。

那么我该如何解决这个问题呢?一句话,为不同方向设置不同背景图像的最佳方法是什么?我在正确的轨道上吗?

4

4 回答 4

5

onCreate您的活动中,您可以使用此检查当前方向

Configuration newConfig = getResources().getConfiguration();
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
                 Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
                 // set background for landscape
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
               // set background for portrait
}
于 2013-05-26T05:12:40.693 回答
3

一句话,为不同方向设置不同背景图像的最佳方法是什么?

第 1 步:删除您所做的一切,尤其是整个android:configChanges内容。现在忽略背景图像,让其余的配置更改逻辑正常工作。

步骤#2:-land为你拥有的这个图像的任何密度创建必要资源目录的版本(例如,res/drawable-land-hdpi/匹配你的res/drawable-hdpi/

步骤#3:将横向版本移动到-land目录中,将它们命名为与纵向等效项相同(例如,res/drawable-hdpi/background.pngres/drawable-land-hdpi/background.png

第 4 步:只需在android:background属性中引用公共资源名称(例如,@drawable/background

这边走:

  • 您坚持更好的配置更改行为,并且

  • Android 会在正确的时间为您提供正确的背景

于 2013-05-26T05:14:17.327 回答
1

您可以在 onCreate 中检查方向

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
int orientation = display.getRotation();
if (orientation == Surface.ROTATION_0 || orientation == Surface.ROTATION_180)
{
    // Portrait
}
else
{
    // landscape
}
于 2013-05-26T05:10:05.820 回答
0

在 setContentView 方法后检查方向变化

int orientation = getResources().getConfiguration().orientation;
    if (orientation == 1){
        utility.toast("portrait");
    }else {
        utility.toast("landscape");
   }
于 2017-10-21T09:52:37.893 回答