如何在首次启动应用程序时检测方向模式

时间:2013-05-26 04:56:11

标签: android orientation landscape screen-orientation portrait

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

@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 个答案:

答案 0 :(得分:4)

在活动的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
}

答案 1 :(得分: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会在正确的时间为您提供正确的背景

答案 2 :(得分: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
}

答案 3 :(得分:0)

在setContentView方法

之后检查方向更改
int orientation = getResources().getConfiguration().orientation;
    if (orientation == 1){
        utility.toast("portrait");
    }else {
        utility.toast("landscape");
   }