Can';t在Android上强制RTL

Can';t在Android上强制RTL,android,xamarin.forms,Android,Xamarin.forms,对XAML中的元素使用followDirection和rightoleft时,效果很好 但是,我想在默认情况下设置它,并在整个应用程序中强制它 随后,但什么也没有发生,设置Window.DecorView.LayoutDirection似乎没有任何作用 我还设置了: 以下是我的Android项目代码: protectedoverride void OnCreate(Bundle savedInstanceState) { Window.DecorView.LayoutDirection=Andr

对XAML中的元素使用
followDirection
rightoleft
时,效果很好

但是,我想在默认情况下设置它,并在整个应用程序中强制它

随后,但什么也没有发生,设置
Window.DecorView.LayoutDirection
似乎没有任何作用

我还设置了:

以下是我的Android项目代码:

protectedoverride void OnCreate(Bundle savedInstanceState)
{
Window.DecorView.LayoutDirection=Android.Views.LayoutDirection.Rtl;
TabLayoutResource=Resource.Layout.Tabbar;
ToolbarResource=Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(这个,savedInstanceState);
全局::Xamarin.Forms.Forms.Init(这个,savedInstanceState);
加载应用程序(新应用程序());
}
public override void OnRequestPermissionsResult(int-requestCode,字符串[]权限,[GeneratedEnum]权限[]grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(请求代码、权限、GrantResult);
base.OnRequestPermissionsResult(请求代码、权限、GrantResult);
}
我想在默认情况下设置它,并在整个应用程序中强制它

首先,我们应该知道应用程序的方向是基于设备语言和区域的,所以您需要确保语言和区域的设置是RTL(如阿拉伯语)

你可以在代码后面签入它

var flowDirection = Device.FlowDirection; // this is a readonly property 
如果您确实希望在不更改系统设置的情况下将应用程序设置为RTL。您可以创建一个基本内容页面,并设置其流向。该值将由其所有子项继承(除非您重写它)


如果要让特定元素(如标签)保持LTR,只需将标签上的FlowDirection属性设置为LeftToRight

官方文件呢?我过去也尝试过用Window.DecorView.LayoutDirection全局设置它,但没有成功。是的,我把手机语言改成了RTL one,我把语言改成了阿拉伯语,但没有用。我访问了
Device.FlowDirection
,令我惊讶的是它是
right-toleft
。我将上传一份回购协议样本。我尝试了XF 4.3和最新的4.6,结果是一样的。从您的演示中,我不知道您在哪里设置了
FlowDirection
。这是必要的。你可以测试我的解决方案(定义BaseContentPage)。@LucasZhang MSFT-hmm,我想我明白发生了什么。从docs中,
没有父元素的元素的默认FlowDirection属性值为LeftToRight,而有父元素的元素的默认FlowDirection属性值为MatchParent。
因此,基本上默认值为LeftToRight,我们必须以其他方式显式设置它。不需要将语言设置为RTL或任何东西。如果是这样的话,那么在MainActivity中设置布局方向的意义是什么呢。真奇怪。我要在文档页面上打开一张罚单。谢谢你的帮助。
public partial class BaseContentPage : ContentPage
{
  public BaseContentPage()
  {
    InitializeComponent();
    FlowDirection = FlowDirection.RightToLeft;
  }
}