天道酬勤,学无止境

区域设置未在 Android 5.0 Lollipop 中以编程方式设置(Locale not set Programatically in Android 5.0 Lollipop)

问题

我的应用程序根据应用程序中选择的语言设置区域设置。 直到 Kitkat 我的代码工作正常。 未设置更新到 Lollipop 语言环境后。 在这里,我粘贴我的代码来设置语言环境..

Locale locale = new Locale("de_DE");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, null);
回答1

您必须更改语言环境初始化的方式。 由此:

Locale locale = new Locale("de_DE");

对此:

String language = "de";
String country = "DE";
Locale locale = new Locale(language , country);

在此处查看完整回复 https://stackoverflow.com/a/27490553/2659558

干杯!

回答2

您可以使用以下代码将语言环境设置为应用程序。


Locale locale = new Locale("de", "DE");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, null);
回答3

查看 Lollipop 设置默认本地不起作用 尝试仅使用语言代码“de”而不是“de_DE”。

回答4

您可以使用此代码:

 public static final String COUNTRY_EN = "GB";
  public static final String LANG_EN = "en";


country=COUNTRY_EN ;
lang=LANG_EN ;
Locale myLocale = new Locale(lang, country);
Locale.setDefault(myLocale);
Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.setLayoutDirection(myLocale);
conf.locale = myLocale;
res.updateConfiguration(conf, dm);

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在Android 5.0 Lollipop中以代码方式(而非xml)以编程方式使用RippleDrawable?(How to use RippleDrawable programmatically in code (not xml) with Android 5.0 Lollipop?)
    问题 我的涟漪代码如下: <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight"> <item android:id="@+id/rip"> <shape android:shape="oval"> <solid android:color="?android:colorAccent"/> </shape> </item> </ripple> 现在,我想让用户可以选择自己的颜色,因此我需要以编程方式创建波纹。 我找到了这个,我认为这是正确的方法,但是我不知道该如何处理。 纹波将在这里使用: <ImageButton android:id="@+id/add_button" android:layout_width="@dimen/diameter" android:layout_height="@dimen/diameter" android:layout_gravity="end|bottom" android:layout_marginBottom="@dimen/add_button_margin" android:layout
  • 在 Android 5.0 Lollipop 上以编程方式在视图上设置主题(Set a theme on a View programmatically on Android 5.0 Lollipop)
    问题 Android 5.0 Lollipop 添加了为不同视图(不仅仅是 Activity)设置主题的功能。 android:theme="@style/MyAwesomeTheme" 有没有办法在视图上动态设置主题? 回答1 android:theme 更改主题资源中指定的特定属性。 您可以使用任何重载的构造函数实例化特定视图,例如View(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) 。 这基本上就是充气机所做的。 例如v7.widget.Toolbar试图在构造函数的超级调用中从资源android:theme创建主题上下文,这或多或少是我上面提到的。 只有某些小部件使用android:theme覆盖应用程序android:theme 。 我不确定是否可以直接指定主题,而不是上面提到的实例化,或者使用支持的单个属性及其相关方法。
  • 以编程方式设置区域设置(Set Locale programmatically)
    问题 我的应用程序支持3种(即将出现4种)语言。 由于几种语言环境非常相似,因此我想为用户提供在我的应用程序中更改语言环境的选项,例如,意大利人可能更喜欢西班牙语而不是英语。 用户是否有一种方法可以在应用程序可用的语言环境中进行选择,然后更改使用的语言环境? 我认为为每个Activity设置区域设置不是问题,因为这是在基类中执行的简单任务。 回答1 对于仍在寻找此答案的人们,由于从API 24中不推荐使用configuration.locale ,因此您现在可以使用: configuration.setLocale(locale); 考虑到此方法的minSkdVersion是API 17。 完整的示例代码: @SuppressWarnings("deprecation") private void setLocale(Locale locale){ SharedPrefUtils.saveLocale(locale); // optional - Helper method to save the selected language to SharedPreferences in case you might need to attach to activity context (you will need to code this) Resources resources =
  • 如何在Android支持库v24.0.0中以编程方式设置AppBarLayout的高程?(How to set the elevation of an AppBarLayout programmatically in the Android Support Library v24.0.0?)
    问题 从Android支持库v23.4.0升级到v24.0.0时,以编程方式将海拔高度设置为0到AppBarLayout停止工作: appBayLayout.setElevation(0); 在XML中设置高程时,它确实起作用。 回答1 编辑 AppBarLayout的AppBarLayout使用StateListAnimator ,该StateListAnimator根据其状态定义高程。 因此,如果正在使用StateListAnimator (默认情况下发生),则使用setElevation将无效。 通过XML或以编程方式设置elevation (对于API> = 21均可): StateListAnimator stateListAnimator = new StateListAnimator(); stateListAnimator.addState(new int[0], ObjectAnimator.ofFloat(view, "elevation", 0)); appBarLayout.setStateListAnimator(stateListAnimator); 旧答案 这似乎是设计支持库的问题。 问题与使用setElevation编程方式设置高程的方式有关。 从XML设置它是在视图中放置一个StateListAnimator而不调用setElevation 。
  • 如何在Android中以编程方式设置背景可绘制(How set background drawable programmatically in Android)
    问题 设置背景: RelativeLayout layout =(RelativeLayout)findViewById(R.id.background); layout.setBackgroundResource(R.drawable.ready); 是最好的方法吗? 回答1 layout.setBackgroundResource(R.drawable.ready); 是正确的。 实现它的另一种方法是使用以下方法: final int sdk = android.os.Build.VERSION.SDK_INT; if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready) ); } else { layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready)); } 但是我认为出现此问题是因为您尝试加载大图像。 这是一个很好的教程,介绍如何加载大位图。 更新: API级别22中不推荐使用getDrawable(int) 现在在API级别22中弃用了getDrawable(int )
  • 在Android中以编程方式更改应用语言(Change app language programmatically in Android)
    问题 是否可以在仍然使用Android资源的情况下以编程方式更改应用程序的语言? 如果不是,是否可以请求特定语言的资源? 我想让用户从应用程序中更改应用程序的语言。 回答1 这是可能的。 您可以设置语言环境。 但是,我不建议这样做。 我们已经在早期阶段进行了尝试,基本上是在与系统抗争。 我们对更改语言有相同的要求,但决定解决UI与电话UI相同的事实。 它可以通过设置区域设置来工作,但是却存在很多问题。 根据我的经验,每次输入活动(每个活动)时,都必须进行设置。 如果您仍然需要此代码,请使用以下代码(再次,我不建议您这样做) Resources res = context.getResources(); // Change locale settings in the app. DisplayMetrics dm = res.getDisplayMetrics(); android.content.res.Configuration conf = res.getConfiguration(); conf.setLocale(new Locale(language_code.toLowerCase())); // API 17+ only. // Use conf.locale = new Locale(...) if targeting lower versions res
  • 如何在Android 5.0(Lollipop)中以编程方式接听来电?(How can incoming calls be answered programmatically in Android 5.0 (Lollipop)?)
    问题 当我尝试为来电创建自定义屏幕时,我试图以编程方式接听来电。 我正在使用以下代码,但在Android 5.0中无法正常工作。 // Simulate a press of the headset button to pick up the call Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON); buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK)); context.sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED"); // froyo and beyond trigger on buttonUp instead of buttonDown Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE
  • 以编程方式更改区域设置在某些设备中不起作用(Changing locale programmatically not working in some devices)
    问题 我有以下代码: /** * Sets a new Locale for the APP. * @param newLocale - Valid new locale. */ private static void setLocale( String newLocale ) { Locale locale = new Locale( newLocale ); Locale.setDefault( locale ); Configuration config = new Configuration(); config.locale = locale; context.getResources().updateConfiguration( config, context.getResources().getDisplayMetrics() ); } 简单的。 但是,当我在智能手机(4.1.1)中运行它时,它确实可以正常工作。 设备更改字符串以匹配语言。 但是对于平板电脑(4.3),它不起作用。 如果我输出类似: Log.d("TAG",Locale.getDefault()); 两种设备上的语言环境似乎都已更改,但是正如我所说,字符串没有转换为正确的语言。 我做了很多调试,发现对象之间的区别:在4.1.1上检出Configuration对象: 并检出平板电脑上的配置对象(4.3)
  • Android 通知未在 Marshmallow 中显示颜色图标(Android Notification is not showing Colour Icon in Marshmallow)
    问题 我正在制作应用程序是我从Parse获取数据并将该数据传输到 Notification 以生成并向用户显示它。 但出于某种原因,我无法在棉花糖中显示正确的彩色图标 在所有其他 Android 版本中,它的工作完全正常,但在 Marshmallow 中,它令人毛骨悚然的白色图标不是我选择的实际图标。 这是我的通知代码。 Intent cIntent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, cIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_launcher) .setContentText(data) .setContentTitle("Notification from Parse") .setContentIntent(pendingIntent); Notification notification = builder.build()
  • 在运行时更改语言环境?(Change the locale at runtime?)
    问题 我们有一个Android应用,可作为远程PC程序的客户端。 我们想要添加一个功能,以便PC可以指示Android应用在运行时更改其语言环境,即启动该应用; 与PC进行通讯; 稍后,PC会通知应用程序切换为西班牙语或中文。 我们已经为它们各自的语言环境设置了所有布局和字符串资源。 我们的应用程序是用户看到的唯一应用程序,因此设备的其余部分是否保持英语都没有关系。 在Android中以编程方式在Change language上有另一个线程,但这似乎没有得出结论。 我可以放。 。 。 Locale locale = new Locale(sTheNewLocale); Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 。 。 。 在setContentView ()之前的onCreate()中,但是如果我想在屏幕启动并运行后更改语言环境,那并没有太大帮助。 在Activity已经运行之后
  • Android:以编程方式更改语言(Android: Change language programmatically)
    问题 我有3个按钮可以更改语言。 因此,我需要制作方法,在该方法中,我可以将侦听器设置为按钮,这些按钮可以在每次按下按钮时更改语言。 我尝试了这个https://stackoverflow.com/a/2900144/1088229,但是这样,它仅更改一次语言环境,似乎不再起作用(如果我再次单击,它甚至都不会响应)。 因此,我在侦听器的末尾添加了changeLanguageListener() ,从而刷新了侦听器。 那可以,我如何解决呢?还是有另一种方法呢? private void changeLanguageListener() { final Button butEn = (Button) findViewById(R.id.button_language_en); final Button butLt = (Button) findViewById(R.id.button_language_lt); final Button butRu = (Button) findViewById(R.id.button_language_ru); OnClickListener listener = new OnClickListener() { public void onClick(View v) { Button but = (Button) v; Resources res =
  • 如何在Android 5.x(Lollipop)上以编程方式配置静态IP地址,网络掩码,网关和DNS以进行Wi-Fi连接(How to configure a static IP address, netmask, gateway, DNS programmatically on Android 5.x (Lollipop) for Wi-Fi connection)
    问题 如何在Android 5.x上以编程方式配置静态IP地址,网络掩码,网关,DNS以进行Wi-Fi连接? 是否有开放的API(找不到它)或隐藏的API可以用于此目的? 如果可能的话,也请您举一些例子。 我知道在Android 4.0以上版本中可能,但在Android 5.0上则无效 回答1 不幸的是,仍然没有开放的API。 Android 4.0的解决方案在LOLLIPOP中不起作用,因为事情已经转移了。 特别是新的IpConfiguration类现在持有StaticIpConfiguration和所有这些领域。 仍然可以通过使用反射(带有所有的脆性)和类似的东西来访问它们。 警告,此代码仅适用于Android 5.0。 您需要检查Build.VERSION.SDK_INT并采取相应的措施。 @SuppressWarnings("unchecked") private static void setStaticIpConfiguration(WifiManager manager, WifiConfiguration config, InetAddress ipAddress, int prefixLength, InetAddress gateway, InetAddress[] dns) throws ClassNotFoundException
  • 在iPhone中以编程方式从另一个应用程序打开“设置”应用程序(Open Settings app from another app programmatically in iPhone)
    问题 如果未在iPhone中启用gps,则必须从我的应用程序中打开设置应用程序。 我使用了以下代码。 它在iOS模拟器中效果很好,但在iPhone中不起作用。 我可以知道这段代码有什么问题吗? if (![CLLocationManager locationServicesEnabled]) { int (*openApp)(CFStringRef, Boolean); void *hndl = dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"); openApp = (int(*)(CFStringRef, Boolean)) dlsym(hndl, "SBSLaunchApplicationWithIdentifier"); openApp(CFSTR("com.apple.Preferences"), FALSE); dlclose(hndl); } 回答1 好消息 : 您可以像这样以编程方式打开设置应用程序(仅适用于iOS8及更高版本)。 如果您使用的是Swift 3.0: UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!)
  • 如何在Android中以编程方式启用/禁用辅助功能(How to Programmatically Enable/Disable Accessibility Service in Android)
    问题 我想以编程方式启用/禁用“设置”->“可访问性”选项下列出的“可访问性服务”。 我可以像下面这样启动Accessibility Intent: Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); startActivityForResult(intent, 0); 但是我对如何通过我的代码启用视图中列出的服务一无所知。 请给我您的意见。 回答1 我通过致电找到了对我有用的解决方案 Settings.Secure.putString(getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "pkgname/classname"); Settings.Secure.putString(getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED, "1"); 其中pkgname是您的软件包名称,而classname是您的可访问性服务的类别名称。 如果您需要启用多个服务,或者不想破坏以前的设置,则可能要使用:来分隔其他服务。 另外,您可能需要作为系统应用程序运行,并且可能需要以下权限 <uses-permission
  • 升级到Lollipop后,Android NDK mmap调用在32位设备上中断(Android NDK mmap call broken on 32-bit devices after upgrading to Lollipop)
    问题 我正在尝试获取784 MiB的内存。 是的,我知道对于32位手机来说这很多,但是以下调用在Android 5.0之前有效: mmap(0, 0x31000000, PROT_NONE, MAP_ANON | MAP_SHARED, -1, 0); 但是,在来自不同制造商的三种不同设备上,升级到Android 5.0破坏了这一点。 我认为这是5.0中内存分配功能的一些变化; 也许需要传递不同的标志? 这是在logcat中返回的错误消息: E/libc﹕ mmap fail (pid 9994, tid 10125, size 822083584, flags 0x21, errno 12(Out of memory)) 回答1 在mmap()失败的地方,打开/proc/self/maps并将内容复制到临时文件,然后在编辑器中检查该文件。 您应该看到很多这样的条目: 12e01000-42c00000 ---p 00201000 00:04 11639 /dev/ashmem/dalvik-main space (deleted) 55281000-5d500000 r--s 00000000 00:16 61 /storage/sdcard1/blah 5d500000-67e80000 rw-p 00000000 00:00 0 [anon:libc_malloc]
  • 如何在Android中以编程方式打开前闪光灯?(How to turn on front flash light programmatically in Android?)
    问题 我想在Android中以编程方式打开前闪光灯(不使用相机预览)。 我用谷歌搜索,但是找到的帮助使我转至此页面 有人有任何链接或示例代码吗? 回答1 对于2021年,有了CameraX,现在变得非常简单:https://stackoverflow.com/a/66585201/294884 对于此问题,您应该: 检查手电筒是否可用? 如果是这样,则关闭/打开如果没有,那么您可以根据您的应用程序需求执行任何操作。 对于检查设备中闪存的可用性: 您可以使用以下内容: context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); 如果有闪存可用,则返回true,否则返回false。 看: 有关更多信息,请访问http://developer.android.com/reference/android/content/pm/PackageManager.html。 对于打开/关闭手电筒: 我用谷歌搜索并获得了有关android.permission.FLASHLIGHT的信息。 Android清单的许可看起来很有希望: <!-- Allows access to the flashlight --> <permission android:name="android
  • 在 Android 6.x (Marshmallow) 中以编程方式设置静态 IP 和网关(Set static IP and gateway programmatically in Android 6.x (Marshmallow))
    问题 谁能告诉我如何在 Android 6 中以编程方式设置静态 IP 和网关? 我在这里和这里阅读过。 Settings.System 不再工作,谷歌说WIFI_STATIC_IP在 API 级别 17 中已弃用,而使用WifiManger代替。 不幸的是,我在WifiManger和WifiConfiguration类中找不到任何关于它的WifiManger 。 回答1 由于没有官方 API,我必须通过修改以下代码片段和此答案中的示例来提出解决方案。 此解决方案适用于 Lollipop 以上的设备。 @SuppressWarnings("unchecked") public static void setStaticIpConfiguration(WifiManager manager, WifiConfiguration config, InetAddress ipAddress, int prefixLength, InetAddress gateway, InetAddress[] dns) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException
  • 在应用程序内部更改语言(区域设置)后如何刷新活动(How to refresh activity after changing language (Locale) inside application)
    问题 我的应用程序用户可以从应用程序的设置中更改语言。 是否可以在不影响常规语言设置的情况下更改应用程序内的语言? 这个stackoverflow问题对我来说非常有用,我已经尝试过了。 更改语言后,新创建的活动将以更改的新语言显示,但是当前活动和处于暂停状态的先前创建的活动不会更新。如何更新活动? 我也花了很多时间试图使首选项更改立即生效,但没有成功。 重新启动应用程序后,将再次创建所有活动,因此现在语言已正确更改。 android:configChanges="locale" 还为所有活动添加了清单。 并且还支持所有屏幕。 目前,我尚未在activity的onResume()方法中做任何事情。 有什么方法可以刷新或更新活动(没有完成并重新开始)? 我是否缺少在onResume()方法中要做的事情? 回答1 更改语言后,新创建的活动将以更改的新语言显示,但是当前活动和处于暂停状态的先前创建的活动不会更新。如何更新活动? API 11之前的版本(蜂窝)是使现有活动以新语言显示的最简单方法是重新启动它。 这样,您就不必费心自己重新加载每个资源。 private void restartActivity() { Intent intent = getIntent(); finish(); startActivity(intent); } 如果更改了语言首选项
  • Android N以编程方式更改语言(Android N change language programmatically)
    问题 我发现了只在Android N设备上才能复制的真正奇怪的错误。 在浏览我的应用程序时,可以更改语言。 这是更改它的代码。 public void update(Locale locale) { Locale.setDefault(locale); Configuration configuration = res.getConfiguration(); if (BuildUtils.isAtLeast24Api()) { LocaleList localeList = new LocaleList(locale); LocaleList.setDefault(localeList); configuration.setLocales(localeList); configuration.setLocale(locale); } else if (BuildUtils.isAtLeast17Api()){ configuration.setLocale(locale); } else { configuration.locale = locale; } res.updateConfiguration(configuration, res.getDisplayMetrics()); } 这段代码在我的旅行活动中非常有用(通过recreate()调用),但是在接下来的所有活动中
  • 如何在Android Lollipop中以编程方式真正更改主色和强调色?(How to _really_ programmatically change primary and accent color in Android Lollipop?)
    问题 首先,这个问题提出了一个非常相似的问题。 但是,我的问题有细微的差别。 我想知道的是,是否可以通过编程方式将主题的colorPrimary属性更改为任意颜色? 因此,例如,我们有: <style name="AppTheme" parent="android:Theme.Material.Light"> <item name="android:colorPrimary">#ff0000</item> <item name="android:colorAccent">#ff0000</item> </style> 在运行时,用户决定要使用#ccffff作为原色。 当然,我无法为所有可能的颜色创建主题。 我不介意我是否必须做一些骇人听闻的事情,例如依靠Android的私有内部结构,只要它可以使用公共SDK就能工作。 我的目标是最终使ActionBar和所有小部件(如CheckBox都使用此原色。 回答1 主题是一成不变的,你不能。 回答2 我阅读了有关通讯录应用程序的评论,以及如何为每个通讯录使用主题。 通讯录应用可能有一些预定义的主题(对于每种材料的原色,请参见http://www.google.com/design/spec/style/color.html)。 您可以在onCreate方法中的setContentView方法之前应用主题。 然后