gpt4 book ai didi

android - 导航图标 toast 提示

转载 作者:行者123 更新时间:2023-11-29 20:15:01 28 4
gpt4 key购买 nike

Android 工具栏菜单项在长按时显示 toast 提示。 toast 消息在带有“title”属性的 xml 中定义:

<item
android:id="@+id/openRightMenu"
android:orderInCategory="300"
android:title="@string/navigation_drawer_right_desc"
android:icon="@drawable/menu24_2"
app:showAsAction="always"
/>

我可以为工具栏的导航图标设置相同的行为吗?我用下面的代码设置图标

        toolbar.setNavigationIcon(R.drawable.locations_icon);

但是我不能在这里设置描述文字

最佳答案

我使用了两种方法来获取Toolbar 的导航按钮 View 。第一个在 Toolbar 类上使用反射,第二个在 Toolbar 的子 View 上迭代,直到找到 ImageButton

反射法:

private View getNavButtonView(Toolbar toolbar) {
try {
Class<?> toolbarClass = Toolbar.class;
Field navButtonField = toolbarClass.getDeclaredField("mNavButtonView");
navButtonField.setAccessible(true);
View navButtonView = (View) navButtonField.get(toolbar);

return navButtonView;
}
catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}

return null;
}

和迭代法:

private View getNavButtonView(Toolbar toolbar) {
for (int i = 0; i < toolbar.getChildCount(); i++)
if (toolbar.getChildAt(i) instanceof ImageButton)
return toolbar.getChildAt(i);

return null;
}

请注意,如果您使用迭代方法,则应在设置导航图标后立即调用它,该方法应在 Toolbar 上添加或设置任何其他 View 之前调用

在我们得到View之后,我们只需要在它上面设置一个OnLongClickListener,并显示带有适当偏移量的Toast .例如:

toolbar.setNavigationIcon(R.drawable.ic_launcher);
View navButtonView = getNavButtonView(toolbar);

if (navButtonView != null) {
navButtonView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast toast = Toast.makeText(v.getContext(),
"Navigation Button View",
Toast.LENGTH_SHORT);

int[] loc = new int[2];
v.getLocationOnScreen(loc);

toast.setGravity(Gravity.TOP | Gravity.LEFT,
loc[0] + v.getWidth() / 2,
loc[1] + v.getHeight() / 2);
toast.show();

return true;
}
}
);
}

关于android - 导航图标 toast 提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34077703/

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