我有一个应用程序小部件,当它更新时,获取具有与小部件匹配的维度的图像,并将该图像放入ImageView
(通过远程视图
)。它工作得很好。
但是对于支持主屏幕旋转的设备(我不是说基于设备方向的活动的旋转,而是主屏幕本身的旋转),当从横向到纵向,小部件的尺寸和纵横比会发生一些变化,反之亦然。。。i、 e.不保持固定尺寸。
因此,我的小部件需要能够检测主屏幕何时旋转,并获取新图像(或者至少加载不同的预取图像)。
我一辈子都搞不清楚这是否可能以及如何可能。有什么线索吗?
检查此代码是否有效:
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();
}
});
您可以收听广播ACTION_CONFIGURATION_CHANGED,当当前设备配置(方向,区域设置等)发生变化时,由Android系统发送。根据留档:
操作\u配置\u已更改:
广播操作:当前设备配置(方向、区域设置等)已更改。当这种变化发生时,UI(视图层次结构)将需要根据这些新信息进行重建;在大多数情况下,应用程序不需要担心这一点,因为系统将负责停止和重新启动应用程序,以确保它看到新变化。一些无法重新启动的系统代码需要注意此操作并适当处理。
您不能通过清单中声明的组件来接收此消息,只能通过向上下文显式注册来接收。registerReceiver()。
这是一个受保护的意图,只能由系统发送。
public class YourWidgetProvider extends AppWidgetProvider {
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
context.registerReceiver(mOrientationChangeReceiver,new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED));
}
@Override
public void onDisabled(Context context) {
context.unregisterReceiver(mOrientationChangeReceiver);
super.onDisabled(context);
}
public BroadcastReceiver mOrientationChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent myIntent) {
if ( myIntent.getAction().equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
if(context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
// landscape orientation
//write logic for building remote view here
// buildRemoteViews();
}
else {
//portrait orientation
//write logic for building remote view here
// buildRemoteViews();
}
}
}
};
}
使用以下代码检测方向:-
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));
}
我发现下面的问题屏幕覆盖检测时,在Motog3Marshmallow移动点击权限。 我在到处的互联网搜索中找到了许多解决方案,您可以查看以下内容: > 删除esfile资源管理器 https://www.youtube.com/watch?v=QHidevTDrYI 检测到屏幕覆盖阻止Android权限 https://android.stackexchange.com/questions/148
我想在模拟器上测试手机的旋转,我看到我们必须使用CtrlF11的所有地方,但它只旋转模拟器的图像,不会启动配置更改事件或重新绘制活动。 下面是我用CtrlF11得到的: 那么,我必须用什么来模拟真实的旋转呢?
运行我的android应用程序时出现以下错误: 检测到屏幕覆盖: 要更改此权限设置,您首先必须从设置中关闭屏幕覆盖 我的应用程序没有列在显示的列表中。 如何解决这个错误?
在屏幕旋转后,虽然我在super.onCreate(null);,中传递null,但我得到了object返回的nullPointerException异常。我知道在传递savedInstanceState=null的同时必须销毁并重新创建活动,这意味着活动应该在旋转后开始,因为它是第一次开始,为什么在旋转后会出现此异常? onCreate()代码段,其中名为historyText的对象 Logca
实现在竖屏的NavigationController中push一个横屏的UIViewController,模拟器测试兼容5.0、6.0系统。实现程序中手动旋转屏幕的效果。 [Code4App.com]
我注意到我的新手机上的Android应用程序有一个奇怪的问题。SDK 23权限弹出窗口(如外部存储)被下面的附加警报阻止。我最初以为这与我的手机有关,但它似乎不影响我安装的任何其他应用程序。 这个问题可能与安装了调试版本有关,还是我的权限处理有问题?我以为它可能与我正在使用的广告平台之一有关,但我尝试禁用它们,它仍然出现 我已经粘贴了下面生成此权限请求的图像保存功能。我正在使用Dexter来节省编