的说明文字有我用得到Toolbar
的导航按钮查看两种方式。第一个使用Toolbar
类的反思,第二个使用Toolbar
的孩子View
s,直到找到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;
}
请注意,如果您使用迭代法,应立即设置导航图标后调用,这应该在任何其他View
被添加或设置在Toolbar
之前被调用。
当我们得到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;
}
}
);
}
不知道我明白这个问题,但我想你会想为文本添加一个'textview',然后在代码中调用'textview.settext()'。看到这个答案http://stackoverflow.com/questions/19452269/android-set-text-to-textview – EnduroDave
@Drdavidpier指这个问题http://stackoverflow.com/questions/26490126/appcompat-style-background-propagated工具栏中的图像到步骤2.有一个提示我在说 –
我相信它必须在你的代码中完成。我不认为你可以为它设置任何XML属性。这可以接受吗? –