我有一个Xamarin Form应用程序,它有一个语言下拉列表,所以用户可以选择应用程序语言。当用户选择我调用的语言:
CultureInfo culture = CultureInfo.CreateSpecificCulture(language);
System.Globalization.CultureInfo.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
AppResources.Culture = culture;
应用程序运行良好,并从AppResources中拾取字符串。{语言}。resx我的问题是定位图像时。根据微软的建议,我已经将我的图像添加到android项目中的资源/可绘制文件夹中。在我的情况下,我补充说谢谢。jpg到Resources/drawable和Resources/drawable-fr。但即使我选择fr-fr作为语言,它也只显示Resources/drawable文件夹上的图像,但是我发现如果我没有更改应用程序语言(区域性),而是更改了设备语言,设备会显示正确的图像(Resources/drawable-fr中的图像)。我想知道是否有办法解决这个问题。
您可以创建一个依赖性服务来修复它。
首先,创建一个接口。
public interface IChangeService
{
void ChangeIanguage(string lang);
}
我们在xamarin表单的这个格式代码中使用了它。
<StackLayout>
<TimePicker></TimePicker>
<Image WidthRequest="100">
<Image.Source>
<OnPlatform x:TypeArguments="ImageSource">
<On Platform="iOS, Android" Value="flag.png" />
<On Platform="UWP" Value="Assets/Images/flag.png" />
</OnPlatform>
</Image.Source>
</Image>
<Button Text="Change" Clicked="Button_Clicked"></Button>
</StackLayout>
这是背景代码。
public partial class LocalizedXamlPage : ContentPage
{
public LocalizedXamlPage()
{
InitializeComponent();
}
private void Button_Clicked(object sender, System.EventArgs e)
{
DependencyService.Get<IChangeService>().ChangeIanguage("en");
}
}
然后在android平台上实现界面。如果我们更改本地化,我们需要它在运行时工作,我们应该重新启动应用程序。
[assembly: Dependency(typeof(ChangeLanguageService))]
namespace UsingResxLocalization.Droid
{
public class ChangeLanguageService : IChangeService
{
public void ChangeIanguage(string lang = "in")
{
LanguageManager.ChangeLanguage(MainActivity.instance, lang);
//restart your application.
Intent intent = new Intent(MainActivity.instance, typeof(MainActivity));
intent.SetFlags(ActivityFlags.ClearTask | ActivityFlags.NewTask);
MainActivity.instance.StartActivity(intent);
}
}
}
然后我们需要创建一个BaseActive
(因为我们在android中更改了Locale
,所以我们应该使用相同的Context。)和Language ageManager
(在运行时更改本地化)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Support.V7.App;
using Android.Views;
using Android.Widget;
using Java.Util;
using Xamarin.Forms.Platform.Android;
namespace UsingResxLocalization.Droid
{
public class BaseActivity : FormsAppCompatActivity
{
protected override void AttachBaseContext(Context @base)
{
base.AttachBaseContext(LanguageManager.LoadLanguage(@base));
}
}
public class LanguageManager
{
private const string MYLANGUAGE = "myLanguage";
private const string MYPREF = "myPreference";
public static Context LoadLanguage(Context context)
{
var loadedLanguage = GetLanguage(context, Locale.Default.Language);
return ChangeLanguage(context, loadedLanguage);
}
public static Context ChangeLanguage(Context context, string language)
{
SaveLanguage(context, language);
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
return ChangeForAPI24(context, language);
}
return ChangeForLegacy(context, language);
}
private static string GetLanguage(Context context, string Language)
{
var privatePreference = context.GetSharedPreferences(MYPREF, FileCreationMode.Private);
return privatePreference.GetString(MYLANGUAGE, Language);
}
private static void SaveLanguage(Context context, string language)
{
var privatePreference = context.GetSharedPreferences(MYPREF, FileCreationMode.Private);
var editor = privatePreference.Edit();
editor.PutString(MYLANGUAGE, language);
editor.Apply();
}
private static Context ChangeForAPI24(Context context, string language)
{
// for api >= 24
var locale = new Locale(language);
Locale.Default = locale;
var configuration = context.Resources.Configuration;
configuration.SetLocale(locale);
configuration.SetLayoutDirection(locale);
return context.CreateConfigurationContext(configuration);
}
private static Context ChangeForLegacy(Context context, string language)
{
var locale = new Locale(language);
Locale.Default = locale;
var resources = context.Resources;
var configuration = resources.Configuration;
configuration.Locale = locale;
resources.UpdateConfiguration(configuration, resources.DisplayMetrics);
return context;
}
}
}
要使主活动扩展BaseActivity.cs
。并公开公共静态Main Active实例;
,
[Activity(Label = "UsingResxLocalization", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : BaseActivity
{
public static MainActivity instance;
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
instance = this;
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
}
这里是运行GIF。
========更新=========
当设备语言是英语时,我用法国国旗进行测试。
我上传我的演示给你,你可以测试它。
https://github.com/851265601/LocalzationDemo/blob/master/LocalzationDemoWithFlag.zip
如果您想更改按钮或其他标签的文本,当您单击按钮时,请添加文化信息。MONTUICulture=new CultureInfo(fr,false);以及单击事件。你可以看到这个GIF。
我有一个Xamarin。表单应用程序,但这个问题只涉及Android。 我有一个闪屏,有一个标志和背景颜色,我想更新。我使用了一个spash主题样式,它指的是包含图像的xml。 主题: XML 然后我使用一个飞溅活动来使它工作,它完美地工作。 现在我想用一个图像作为背景,而不是颜色,所以我所做的是创建这个背景图像,上面有徽标,保存为一个图像,并将其用作启动屏幕。这造成了一些问题。 该图像在屏幕上显
我是xamarin的新手,我需要在应用程序中放置谷歌地图。 我已经从xamarin下载了示例: https://github.com/xamarin/monodroid-samples/tree/master/MapsAndLocationDemo_v2 经过一些改变,它工作了,这个项目显示地图。 以下是工作的项目的代码: /MainActivity.cs/ /BasicDemo.axml/ /A
本文向大家介绍android打开本地图像的方法,包括了android打开本地图像的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了android打开本地图像的方法。分享给大家供大家参考。具体如下: 方法一,调用手机安装的图像浏览工具浏览: 方法二,调用手机自身图像浏览工具浏览: 将上述代码写入onClick事件中即可! 希望本文所述对大家的Android程序设计有所帮助。
我已经成功地使用Parse将声音片段上传到设备或从设备下载。我也在尝试类似的事情,但有图像。我有一个imageView,它包含用户选择的图像。我想将此图像作为嵌套在parseObject(称为“profileParseObject”)中的parseFile发送 我看到了这篇文章:将图库中的图像放入 ParseFile android 但是,使用: 导致“当前上下文中不存在名称”位图“”(我不知道需
本文向大家介绍Android实现本地上传图片并设置为圆形头像,包括了Android实现本地上传图片并设置为圆形头像的使用技巧和注意事项,需要的朋友参考一下 先从本地把图片上传到服务器,然后根据URL把头像处理成圆形头像。 因为上传图片用到bmob的平台,所以要到bmob(http://www.bmob.cn)申请密钥。 效果图: 核心代码: 以上所述就是本文的全部内容了,希望大家能喜欢。
当我捕获照片时,在某些设备中,它会以景观模式存储在某些设备中,它会存储肖像。我想让图像在肖像模式无论如何。为此,我尝试获取图像的数据,并相应地将其旋转到肖像模式。但在一些设备,如三星,VIVO的方向值得到“0”。我不知道该怎么处理那个值。如果我90,那么一些设备将解决此问题,而另一些设备将向上保存照片。 我从Xamarin那里得到这个主意。Andoid图像旋转。但不知怎的,我不能再继续下去了。会有