首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检测Android主屏幕的旋转

检测Android主屏幕的旋转
EN

Stack Overflow用户
提问于 2015-09-02 21:18:39
回答 6查看 3K关注 0票数 23

我有一个App Widget,当它更新时,它会获取一个尺寸与小部件匹配的图像,并将该图像放入ImageView中(通过RemoteViews)。它工作得很好。

但对于支持主屏幕旋转的设备(我指的不是基于设备方向的Activity旋转,而是主屏幕本身的旋转),当从横向到纵向时,小部件的尺寸和纵横比会发生一些变化,反之亦然。即不保持固定大小。

因此,我的小部件需要能够检测主屏幕何时旋转,并获取新图像(或者至少加载不同的预取图像)。

我无论如何也不能弄清楚这是否可能,以及如何实现。有什么线索吗?

EN

回答 6

Stack Overflow用户

发布于 2015-12-22 19:09:22

使用下面的代码来检测方向:

代码语言:javascript
复制
    View view = getWindow().getDecorView();
    int orientation = getResources().getConfiguration().orientation;

    if (Configuration.ORIENTATION_LANDSCAPE == orientation) {
       relativeLayout.setBackgroundDrawable(getResources().getDrawable(R.drawable.log_landscape));
        imageview_Logo.setImageResource(R.drawable.log_landscape_2);
        Log.d("Landscape", String.valueOf(orientation));
        //Do SomeThing; // Landscape
    } else {
       relativeLayout.setBackgroundDrawable( getResources().getDrawable(R.drawable.login_bg) );
       imageview_Logo.setImageResource(R.drawable.logo_login);
        //Do SomeThing;  // Portrait
        Log.d("Portrait", String.valueOf(orientation));
    }
票数 7
EN

Stack Overflow用户

发布于 2015-09-02 21:22:23

使用活动的onConfigurationChanged方法。请参阅以下代码:

代码语言:javascript
复制
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);

// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
    Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
    Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}

好的,所以对于小部件,我们必须添加我们的应用程序类,如下所示,并且不要忘记在清单中声明它,该方法基本上会向小部件的所有实例发送更新广播。

代码语言:javascript
复制
public class MyApplication extends Application {

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // create intent to update all instances of the widget
    Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, MyWidget.class);

    // retrieve all appWidgetIds for the widget & put it into the Intent
    AppWidgetManager appWidgetMgr = AppWidgetManager.getInstance(this);
    ComponentName cm = new ComponentName(this, MyWidget.class);
    int[] appWidgetIds = appWidgetMgr.getAppWidgetIds(cm);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

    // update the widget
    sendBroadcast(intent);
}
}

在清单中..。

代码语言:javascript
复制
<application
android:name="yourpackagename.MyApplication"
android:description="@string/app_name"
android:label="@string/app_name"
android:icon="@drawable/app_icon">

<!-- here go your Activity definitions -->

票数 0
EN

Stack Overflow用户

发布于 2015-09-02 21:34:05

检查下面的代码,它可以工作:

代码语言:javascript
复制
 myButton.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {

    int rotation = getWindowManager().getDefaultDisplay()
      .getRotation();
    // DisplayMetrics dm = new DisplayMetrics();
    // getWindowManager().getDefaultDisplay().getMetrics(dm);
    int orientation;
    CharSequence text;

    switch (rotation) {
    case Surface.ROTATION_0:
     text = "SCREEN_ORIENTATION_PORTRAIT";
     break;
    case Surface.ROTATION_90:
     text = "SCREEN_ORIENTATION_LANDSCAPE";
     break;
    case Surface.ROTATION_180:
     text = "SCREEN_ORIENTATION_REVERSE_PORTRAIT";
     break;
    case Surface.ROTATION_270:
     text = "SCREEN_ORIENTATION_REVERSE_LANDSCAPE";
     break;
    default:
     text = "SCREEN_ORIENTATION_PORTRAIT";
     break;
    }

    // CharSequence text = String.valueOf(orientation);
    Toast toast = Toast.makeText(getApplicationContext(), text,
      Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.CENTER | Gravity.CENTER, 10, 0);
    toast.show();

   }
  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32354317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档