把我的头发拉在这里。因此,我正在使用具有多种类型的可绘制对象的应用程序,并且它们的结构如下:
res/
//Portrait resources
drawable-mdpi/
drawable-hdpi/
drawable-xhdpi/
//Landscape resources
drawable-land-mdpi/
drawable-land-hdpi/
drawable-land-xhdpi/
编辑我什至尝试将特定于肖像的可绘制对象放在drawable-port-mdpi
等下,结果相同。
而且我有一个自定义View
,用于在运行时拉入可绘制对象。这是一个精简的示例,但这是我遇到问题的地方:
public class CustomView extends FrameLayout {
private ImageView mBackgroundView;
public CustomView (Context context) {
super(context);
initialize();
}
public CustomView (Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
public CustomView (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize();
}
private void initialize () {
mBackgroundView = new ImageView(getContext());
mBackgroundView.setImageResource(R.drawable.my_resource);
addView(mBackgroundView, wrapContent());
}
private LayoutParams wrapContent () {
return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
}
}
我希望当我旋转到横向时(让我先澄清一下,我没有configChanges
在清单中处理这个Activity
)并且View
重新创建了这个,mBackgroundView
应该得到可绘制的drawable-land-xhdpi
. 相反,当我向后旋转时,我应该将 drawable 放入drawable-xhdpi
.
现在这就是奇怪的地方。我可以确认所有可绘制对象都在那里并被检测到,就好像我在横向启动应用程序一样,我得到了正确的横向可绘制对象。然而,在旋转时,风景画仍然存在,我没有得到肖像画。相反,如果我以纵向启动,我会被纵向绘制。
当我以编程方式获取资源时,是否应该处理一些特殊情况以“重置”资源或其他东西?