当LayoutDirection设置为rtl时,ActionLayout不显示rtl

问题描述:

我有一个actionLayout作为工具栏上的通知标志。当我在ltr中使用手机时,一切正常。当我将手机转到rtl语言环境时,徽章和菜单图标消失,尽管它们占据了工具栏上的空间并点击它们正在工作。有人可以告诉我我做错了什么吗?当LayoutDirection设置为rtl时,ActionLayout不显示rtl

代码

public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater) 
     { 
      inflater.Inflate(Resource.Menu.welcome_menu, menu); 

      using (var icon = menu.FindItem(Resource.Id.action_notification)) 
      { 
       icon.Icon.ApplyDrawableTint(MobileSettingsManager.Instance.MobileSettings.Theme.NavigationBar.Icon); 
       if ((Activity as BaseActivity).IsRtl() && Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat) 
       { 
        icon.Icon.AutoMirrored = true; 
        var notification = menu.FindItem(Resource.Id.action_notification).ActionView; 
        notification.Click += async delegate 
        { 
         if (Utils.IsOnline(Context)) 
          await MoveToNotifications(); 
        }; 
        _badge = notification.FindViewById<TextView>(Resource.Id.tv_notif_count); 
        _badge.ApplyFont(); 
        _badge.Visibility = ViewStates.Gone; 
       } 
      } 
      using (var icon = menu.FindItem(Resource.Id.action_filter)) 
       icon.Icon.ApplyDrawableTint(MobileSettingsManager.Instance.MobileSettings.Theme.NavigationBar.Icon); 
     } 

welcome_menu.xml

<?xml version="1.0" encoding="utf-8" ?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
     > 

    <item 
    android:id="@+id/action_filter" 
    android:icon="@drawable/ic_filter" 
    app:showAsAction="always"/> 

    <item 
    android:id="@+id/action_notification" 
    app:actionLayout="@layout/action_notification_badge" 
    android:icon="@drawable/notification_bell" 
    app:showAsAction="always"/> 
</menu> 

action_notification_badge.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:clickable="true" 
       android:background="@android:color/transparent" 
    style="@android:style/Widget.ActionButton"> 
    <ImageView 
     android:id="@+id/hotlist_bell" 
     android:src="@drawable/notification_bell" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_marginEnd="8dp" 
     android:layout_marginTop="8dp" 
     android:contentDescription="bell" /> 
    <TextView 
     android:id="@+id/tv_notif_count" 
     android:layout_width="wrap_content" 
     android:minWidth="17sp" 
     android:textSize="10sp" 
     android:textColor="#ffffff" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="@null" 
     android:backgroundTint="#ff0000" 
     android:layout_alignTop="@id/hotlist_bell" 
     android:layout_alignEnd="@id/hotlist_bell" 
     android:layout_marginBottom="4dp" 
     android:layout_marginStart="4dp" 
     android:background="@drawable/rounded_square" /> 
</RelativeLayout> 

rounded_square.xml

<?xml version="1.0" encoding="utf-8" ?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid 
     android:color="#a3a3a3"/> 
</shape> 

在浪费了一天的时间后,我不得不使用LinearLayout而不是RelativeLayout作为我的action_notification_badge.xml的根。一般情况下,使用RelativeLayout的事情会变得混乱(例如,您无法在以RelativeLayout为根元素的Google地图中制作自定义标记信息窗口),因此始终倾向于使用LinearLayout。我的最终代码为action_notification_badge.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:clickable="true" 
       android:orientation="horizontal" 
    style="@android:style/Widget.ActionButton" > 
    <RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <ImageView 
     android:id="@+id/hotlist_bell" 
     android:src="@drawable/ic_notification" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_marginEnd="8dp" 
     android:contentDescription="bell" /> 
    <TextView 
     android:id="@+id/tv_notif_count" 
     android:layout_width="wrap_content" 
     android:minWidth="17sp" 
     android:textSize="10sp" 
     android:textColor="#ffffff" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@id/hotlist_bell" 
     android:layout_alignEnd="@id/hotlist_bell" 
     android:textDirection="locale" 
     android:textAlignment="gravity" 
     android:gravity="center" 
     android:background="@drawable/rounded_square" 
     android:layout_marginBottom="8dp" 
     android:layout_marginStart="8dp" 
     android:text="@null" /> 
    </RelativeLayout> 
</LinearLayout>