我的用户可以更改应用内的区域设置(他们可能希望将手机设置保留为英文,但可以用法语,荷兰语或任何其他语言阅读我的应用内容...)
为什么这个在1.5/1.6中完全正常但在2.0中不再是???
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case 201:
Locale locale2 = new Locale("fr");
Locale.setDefault(locale2);
Configuration config2 = new Configuration();
config2.locale = locale2;
getBaseContext().getResources().updateConfiguration(
config2, getBaseContext().getResources().getDisplayMetrics());
// loading data ...
refresh();
// refresh the tabs and their content
refresh_Tab ();
break;
case 201: etc...
Run Code Online (Sandbox Code Playgroud)
问题是,每当用户通过以上代码行时,MENU"缩小"越来越多......
这是缩小的菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 100, 1, "REFRESH").setIcon(android.R.drawable.ic_menu_compass);
SubMenu langMenu = menu.addSubMenu(0, 200, 2, "NL-FR").setIcon(android.R.drawable.ic_menu_rotate);
langMenu.add(1, 201, 0, "Nederlands");
langMenu.add(1, 202, 0, "Français");
menu.add(0, 250, 4, R.string.OptionMenu2).setIcon(android.R.drawable.ic_menu_send);
menu.add(0, 300, …Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个奇怪的错误,当我从相机应用程序返回后,在拍照后,活动会在无限循环中重新启动自身.
UI流程如下:
奇怪的是,它只发生在一些相机上.在运行Jellybean的Nexus S上,相机的行为正常,而Camera Zoom FX则会导致此错误.在运行ICS的Archos G9平板电脑上,相机和Zoom FX都会导致错误.
我已经逐步检查了代码,但是找不到重新启动调用的来源.当我在第二个(和后续的)onCreate()调用中停止调试器时,在调用堆栈中有一个ActivityThread.handleRelaunchActivity()调用.它的Intent没有太多信息:动作为null,类是AcceptPhoto.mFlags具有603979776值,我不知道如何将其转换为实际的intent标志.
不过,这种古怪并不止于此.在我的平板电脑上,我第一次拍照时,应用程序很好.如果我尝试拍第二张照片,屏幕会变得疯狂.如果我没有拍摄秒图片,而是返回上一个屏幕,那么在我打开新活动之前一切正常.无论从哪里开始,如果我一直返回到根活动并开始一个新的活动,它就会开始闪烁.
我会尝试发布一些代码,但我怀疑这个错误不是由我的代码引起的,而是我在底层的Android代码中触发了一些东西.我希望的是,也许有人可以指出我正确的方向找到解决这个bug的方法.任何事都有帮助,所以我感谢你的任何想法!
用于打开相机的代码(使用实用程序类在AcceptPhoto.onCreate()中调用):
private void openCamera(Context context) {
Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File tempFile = getTempFile(context);
try {
if (tempFile != null) {
pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
((Activity) context).startActivityForResult(pictureIntent, GET_ITEM_PHOTO);
} else {
Toast.makeText(context, "Could not create temp file", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
Toast.makeText(context, "Error opening camera " + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
用于显示图片的代码,在AcceptPhoto.onActivityResult()中调用:
private void …Run Code Online (Sandbox Code Playgroud) 我必须让我的Android应用程序在3种语言,即德语,英语和荷兰语.我在我的android应用程序名称values-de和values-nlres目录中创建了三个文件夹.现在,当用户选择特定语言时,我执行以下代码:
Resources res = getResources();
Configuration newConfig = new Configuration(res.getConfiguration());
newConfig.locale = Locale.ENGLISH;
res.updateConfiguration(newConfig, null);
Run Code Online (Sandbox Code Playgroud)
不同值文件夹中的所有字符串都具有相同的名称,即values文件夹中名称为add_site的字符串在文件夹中具有相同的名称the values-de但具有不同的值.当我将语言环境设置为德语时,我的应用程序没有加载德语值?可能是什么问题呢?
谢谢你的帮助.