gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:26 25 4
gpt4 key购买 nike

我想创建自己的 ActionBar 布局。

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

enter image description here

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

我想要抽屉导航的汉堡图标、向上导航的向上图标和 Activity 的标题。

这可能吗?还是已经有解决方案了?

最佳答案

实际上,这很容易做到(虽然有点老套)。首先,为后退按钮创建一个可绘制对象(最好 - 作为选择器,以区分按下/正常状态:

<?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>

接下来,将这个drawable设置为工具栏的logo toolbar.setLogo(R.drawable.back_button_selector);

那么剩下的就是设置click-listener了。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com