我有一个App Widget,当它更新时,它会获取一个尺寸与小部件匹配的图像,并将该图像放入ImageView
中(通过RemoteViews
)。它工作得很好。
但对于支持主屏幕旋转的设备(我指的不是基于设备方向的Activity
旋转,而是主屏幕本身的旋转),当从横向到纵向时,小部件的尺寸和纵横比会发生一些变化,反之亦然。即不保持固定大小。
因此,我的小部件需要能够检测主屏幕何时旋转,并获取新图像(或者至少加载不同的预取图像)。
我无论如何也不能弄清楚这是否可能,以及如何实现。有什么线索吗?
发布于 2015-12-22 19:09:22
使用下面的代码来检测方向:
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));
}
发布于 2015-09-02 21:22:23
使用活动的onConfigurationChanged方法。请参阅以下代码:
@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();
}
}
好的,所以对于小部件,我们必须添加我们的应用程序类,如下所示,并且不要忘记在清单中声明它,该方法基本上会向小部件的所有实例发送更新广播。
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);
}
}
在清单中..。
<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 -->
发布于 2015-09-02 21:34:05
检查下面的代码,它可以工作:
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();
}
});
https://stackoverflow.com/questions/32354317
复制相似问题