我想创建自己的ActionBar布局。

像这样(例如在Paint中创建)

android - 在Android的“自定义ActionBar”按钮中添加向上导航属性-LMLPHP

是否可以为第二个按钮提供向上导航属性?因此,如果我按它,它将完成此Activity并启动其父项。

我想要Navigation Drawer的汉堡图标,向上导航的向上图标和 Activity 标题。

是否可以?还是已经有解决方案?

最佳答案

实际上,这很容易做到(尽管有点不客气)。
首先,为后退按钮创建一个drawable(最好-作为选择器,以区分按下/正常状态:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/back_button_pressed"/>
    <item android:drawable="@drawable/back_button"/>
</selector>

接下来,将此可绘制对象设置为工具栏的徽标toolbar.setLogo(R.drawable.back_button_selector);
然后剩下的唯一事情就是设置点击监听器。
View logoView = getToolbarLogoIcon(toolbar);
logoView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});

...

private View getToolbarLogoIcon(Toolbar toolbar){
    //check if contentDescription previously was set
    boolean hadContentDescription = android.text.TextUtils.isEmpty(toolbar.getLogoDescription());
    String contentDescription = String.valueOf(!hadContentDescription ? toolbar.getLogoDescription() : "logoContentDescription");
    toolbar.setLogoDescription(contentDescription);
    ArrayList<View> potentialViews = new ArrayList<>();

    //find the view based on it's content description, set programatically or with android:contentDescription
    toolbar.findViewsWithText(potentialViews,contentDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);

    //Nav icon is always instantiated at this point because calling setLogoDescription ensures its existence
    View logoIcon = null;
    if (potentialViews.size() > 0) {
        logoIcon = potentialViews.get(0);
    }

    //Clear content description if not previously present
    if (hadContentDescription) {
        toolbar.setLogoDescription(null);
    }

    return logoIcon;
}

(感谢Nicola的帖子here)。或者,如果您不怕反射,则可以像这样轻松完成:
    try {
        Field declaredField = toolbar.getClass().getDeclaredField("mLogoView");
        declaredField.setAccessible(true);
        View logoView = (View) declaredField.get(toolbar);
        logoView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    } catch (Exception ex) {
        //error
    }

另一种可能的解决方案是将自定义布局设置为ActionBar。
虽然,我主张遵循UI/UX准则并仔细检查,如果抽屉导航在次要 Activity 中是必不可少的。

关于android - 在Android的“自定义ActionBar”按钮中添加向上导航属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34202076/

10-12 01:22