我有 android:configChanges =“orientation | keyboardHidden”的活动
当设备方向改变时,我试图在ImageView中更改图像:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// refresh the instructions image
ImageView instructions = (ImageView) findViewById(R.id.img_instructions);
instructions.setImageResource(R.drawable.img_instructions);
}
这仅在手机第一次旋转时有效,但在此之后不会有效。
有人可以告诉我为什么会这样吗?
答案 0 :(得分:2)
Peceps自己的回答IMO是正确的,因为它不依赖于为drawable提供不同的名称。似乎资源id被缓存但是drawable不是,所以我们可以将drawable提供给ImageView而不是资源id,使得解决方案更优雅(避免try / catch块):
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// refresh the instructions image
ImageView instructions = (ImageView) findViewById(R.id.instructions);
instructions.setImageDrawable(
getResources().getDrawable(R.drawable.img_instructions));
}
答案 1 :(得分:1)
我认为你试图做这样的事情
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// refresh the instructions image
ImageView instructions = (ImageView) findViewById(R.id.img_instructions);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
instructions.setImageResource(R.drawable.img_instructions_land);
} else {
instructions.setImageResource(R.drawable.img_instructions_port);
}
}
答案 2 :(得分:1)
使用这个你可以多次改变方向它工作正常
public class VersionActivity extends Activity {
ImageView img;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
img = (ImageView) findViewById(R.id.imageView1);
}
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
img.setImageResource(R.drawable.splash);
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
img.setImageResource(R.drawable.icon);
}
}
}
了解更多信息,请转到How to detect orientation change in layout in Android?
答案 3 :(得分:1)
谢谢,如果我使用不同的图像名称作为肖像和风景,两个答案都是正确的。
使用相同的名称:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// refresh the instructions image
ImageView instructions = (ImageView) findViewById(R.id.instructions);
// prevent caching
try {
instructions.setImageResource(0);
} catch (Throwable e) {
// ignore
}
instructions.setImageResource(R.drawable.img_instructions);
}