从右到左的布局支持

本文关键字:支持 布局 从右到左 | 更新日期: 2023-09-27 17:54:57

我试图支持阿拉伯语从右到左的布局支持,但结果是没有办法你可以在Xamarin表单中支持从右到左

我甚至尝试了依赖服务,自己调用了从右到左的布局。下面是代码:

public CultureInfo SetLocale(string locale)
    {
        var netLocale = locale.Replace("_", "-");
        var ci = new CultureInfo(netLocale);
        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;
        if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.JellyBeanMr1)
        {
            // Change locale settings in the app.
            var dm = Forms.Context.Resources.DisplayMetrics;
            var conf = Forms.Context.Resources.Configuration;
            conf.Locale = new Java.Util.Locale(locale);
            Forms.Context.Resources.UpdateConfiguration(conf, dm);
            if (locale == "en")
                (Forms.Context as MainActivity).Window.DecorView.LayoutDirection = Android.Views.View.LayoutDirectionLtr;
            else
                (Forms.Context as MainActivity).Window.DecorView.LayoutDirection = Android.Views.View.LayoutDirectionRtl;
        }
        return ci;
    }

从右到左的布局支持

我希望我没有太晚,这里有一些链接:

有一个layoutDirection,在这个论坛上他们已经回答了:

为了检测何时需要RTL,我使用了这段代码(我发现需要反射,因为isrighttolleft属性意外不可访问):

bool rightToLeft = false;
PropertyInfo propertyInfo = thisCulture.TextInfo.GetType().GetRuntimeProperty("IsRightToLeft");
object value = propertyInfo?.GetValue(thisCulture.TextInfo);
if (value is bool)
    rightToLeft = (bool) value;

之后,它主要是切换几个属性的情况:

 HorizontalOptions = rightToLeft ? LayoutOptions.EndAndExpand : LayoutOptions.StartAndExpand,
 HorizontalTextAlignment = rightToLeft ? TextAlignment.End : TextAlignment.Start;

更多链接调整布局和字体,支持RTL

如果语言是阿拉伯语,可以设置html的dir属性。

<html dir="rtl">