【问题标题】:ActionView attribute of Android menu item is always nullAndroid 菜单项的 ActionView 属性始终为 null
【发布时间】:2017-11-04 07:53:24
【问题描述】:

我想通过某种逻辑为菜单项设置动画,但 ID 为 refresh 的菜单项在 ActionView 的属性中为 null。我怎么了?

菜单项 Xml:

    <?xml version="1.0" encoding="utf-8" ?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:local="http://schemas.android.com/apk/res-auto">
      <item
           android:id="@+id/refresh"
           android:icon="@drawable/plus_white"
           local:showAsAction="ifRoom"
           local:actionViewClass="android.support.v7.widget.ImageView"
           android:title="Refresh" />
      <item
           android:id="@+id/favoritePodcast"
           android:icon="@drawable/favorite_star"
           local:showAsAction="ifRoom"
           android:title="Favorite" />

    </menu>

OnCreateOption::

     public override bool OnCreateOptionsMenu(IMenu menu)
            {
                MenuInflater.Inflate(Resource.Menu.MainMenu, menu);

                if (_notified)
                {
                    IMenuItem item = menu.FindItem(Resource.Id.refresh);
                    var itemView= item.ActionView.JavaCast<Android.Widget.ImageView>();

                    Animation anim = AnimationUtils.LoadAnimation(ApplicationContext,
                                                       Resource.Animation.fade_in);

                    itemView.StartAnimation(anim);
                    Toast.MakeText(this, "Notified", ToastLength.Short).Show();
                }

                return base.OnCreateOptionsMenu(menu);
            }

断点视图:

【问题讨论】:

    标签: xamarin menu actionview


    【解决方案1】:

    我找到了答案。 感谢robbit的帮助:https://forums.xamarin.com/profile/355640/robbit 我为这样的菜单项定义了一个新布局:

    NewItemRefresh.axml:>>>>

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="48dp"
        android:layout_height="fill_parent"
        android:layout_gravity="right" >
    
      <ImageView
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:clickable="true"
          android:src="@drawable/plus_white"/>
    
     </RelativeLayout>
    

    并将 android:actionLayout="@layout/NewItemRefresh" 添加到菜单项

    现在菜单项改变了:

        <?xml version="1.0" encoding="utf-8" ?>
        <menu xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:local="http://schemas.android.com/apk/res-auto">
          <item
               android:id="@+id/refresh"
               android:icon="@drawable/plus_white"
               local:showAsAction="ifRoom"
               local:actionViewClass="android.support.v7.widget.ImageView" 
               android:actionLayout="@layout/NewItemRefresh"
               android:title="Refresh" />
          <item
               android:id="@+id/favoritePodcast"
               android:icon="@drawable/favorite_star"
               local:showAsAction="ifRoom"
               android:title="Favorite" />
    
        </menu> 
    

    和 OnCreateOptionsMenu:

         public override bool OnCreateOptionsMenu(IMenu menu)
                {
                    MenuInflater.Inflate(Resource.Menu.MainMenu, menu);
    
                    if (_notified)
                    {
                        IMenuItem item = menu.FindItem(Resource.Id.refresh);
                        View view = LayoutInflater.Inflate(Resource.Layout.NewItemRefresh, null);
                        item.SetActionView(view);
                        var itemView= item.ActionView.JavaCast<Android.Widget.RelativeLayout>();
    
                        Animation anim = AnimationUtils.LoadAnimation(ApplicationContext,
                                                           Resource.Animation.fade_in);
    
                        itemView.StartAnimation(anim);
                        Toast.MakeText(this, "Notified", ToastLength.Short).Show();
                    }
    
                    return base.OnCreateOptionsMenu(menu);
                }
    

    所以我可以通过一些逻辑为菜单项设置动画。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-18
      • 2015-07-07
      • 2018-02-11
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多