1

我有一个要求,我需要在操作栏的左侧有一个图标(不是应用程序图标)。

我尝试创建自定义视图,但我不知道如何检测对该图标的点击。

想到的其他选项是使用 setIcon(mycustomicon) 并处理 onOptionSelected 方法的点击事件;但是这个方法也没有被调用并且不起作用。

我正在使用 actionbar sherlockholmes 库。是不是因为这个?

请帮助我,因为我坚持了好几天。

提前致谢

4

4 回答 4

6

这可能会帮助你

    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
            getSupportActionBar().setCustomView(R.layout.actionbar);
            /***THis will be used to creatre a custom action bar click listener **/
            View v =getSupportActionBar().getCustomView();
           /*** sample click is a id of the view i have used in action bar view ***/
            ((Button)v.findViewById(R.id.smaple_click)).setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    /*****Add your click function here******/

                }
            });
于 2014-04-29T10:08:59.943 回答
5

如果要添加自定义视图getSupportActionBar().setCustomView(resId),则需要通过调用来获取新创建的 View 对象getSupportActionBar().getCustomView()setOnClickListener然后,您可以像通常对其他视图所做的那样设置您的点击处理程序。

另一方面,如果您正在使用将 View 作为第一个参数的 setCustomView 的重载之一,则可以省略第一步,因为您已经有一个 View 对象可以使用。

这是第一种情况的示例:

getSupportActionBar().setCustomView(R.layout.test);
getSupportActionBar().setDisplayShowCustomEnabled(true);

getSupportActionBar().getCustomView().setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        // your code here
    }
});
于 2012-07-18T06:37:24.077 回答
1

您可以制作自己的“动作”,就像这样

public class CustomAction extends AbstractAction
{
    public interface CustomActionListener
    {
        public void onAction(int drawable);
    }

    private CustomActionListener listener;
    private int drawable;

    public CustomAction(CustomActionListener listener, int drawable)
    {
        super(drawable);

        this.listener = listener;
        this.drawable = drawable;
    }

    @Override
    public void performAction(View view)
    {
        if (listener != null)
        {
            listener.onAction(drawable);
        }
    }
}

然后,将操作添加到操作栏。

CustomAction menuAction = new CustomAction(this, R.drawable.ic_menu);
ActionBar.addAction(menuAction);

确保活动实现了 CustomActionListener,您几乎可以在其中执行任何操作。

@Override
public void onAction(int drawable)
{
    // your code goes here...
}

我必须承认我使用的是johannilsson/android-actionbar的略微修改版本。但主要思想是要知道如何使用 Action 和 AbstractAction。查看库中“BackAction”的实现。

于 2012-07-18T07:04:12.537 回答
-1

您不需要创建自定义视图 jst 在菜单布局中添加项目(具有所需的图标)。然后处理 onOptionSelected() 并确保您返回true

于 2012-07-18T06:58:19.513 回答