Android:setActionView(null)不会删除带有ActionView的MenuItem上的视图和宽度问题

时间:2012-05-03 13:18:34

标签: android android-actionbar

我尝试使用动作视图为ActionBtem设置动画,其方式与ActionBarHelper for Honeycomb类似,以获得旋转刷新按钮。但我有两个麻烦:

  1. 当我显示动作视图时,项目的宽度小于MenuItem(参见截图的第1部分和第2部分)
  2. 当我想停止动画并通过setActionView(null)返回默认的MenuItem状态时,我的动作视图仍显示在我的MenuItem中(截屏的第3部分)
  3. Different steps of MenuItem (Screenshots)

    ActionView Layout(R.layout.menu_item_refresh)是:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center">
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_menu_refresh" />
    
    </LinearLayout>
    

    onOptionsItemSelected方法代码是:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){               
            default:
                return super.onOptionsItemSelected(item);
    
            case R.id.Menu_Feed_Refresh:
                mAnimatedItem = item;
                item.setActionView(R.layout.menu_item_refresh);
                item.startAnimation(mAnimation);
    
                load();
                return true;
        }
    }
    

    加载完成后,我调用处理程序mAnimatedItem.setActionView(null)

2 个答案:

答案 0 :(得分:0)

如果我正确地取消了您的代码,您可以将动画应用于MenuItem。您按setActionView(null)删除ActionView,但menuItem动画。

您需要从ActionView获取图像并将动画应用于它:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){               
    default:
        return super.onOptionsItemSelected(item);

    case R.id.Menu_Feed_Refresh:
        mAnimatedItem = item;
        item.setActionView(R.layout.menu_item_refresh);
        ImageView iv = (ImageView) item.getActionView().findViewById(R.id.refresh_image_id);
        iv.startAnimation(mAnimation);
        load();
        return true;
    }
}

答案 1 :(得分:0)

如果您想要停止,请致电mAnimation.clearAnimation()