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

时间:2017-06-20 07:36:43

标签: android xml xamarin.android

我有一个actionLayout可以作为工具栏上的通知徽章。当我在ltr中使用手机时,一切正常。当我将手机转到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>

1 个答案:

答案 0 :(得分:1)

在浪费了一天这个错误之后,因为我必须使用LinearLayout而不是RelativeLayout作为我的action_notification_badge.xml的根。一般情况下,RelativeLayout事情会搞砸(例如,您无法在google地图中以RelativeLayout作为根元素制作自定义标记信息窗口),因此请始终选择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>