如何检测自定义操作栏的点击?

时间:2012-07-18 06:19:39

标签: android custom-controls android-actionbar actionbarsherlock

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

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

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

我正在使用actionbar sherlockholmes库。是因为那个吗?

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

提前致谢

4 个答案:

答案 0 :(得分: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******/

                }
            });

答案 1 :(得分:5)

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

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

以下是第一种情况的示例:

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

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

    @Override
    public void onClick(View view) {
        // your code here
    }
});

答案 2 :(得分: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”的实现。

答案 3 :(得分:0)

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