的說明文字有我用得到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屬性。這可以接受嗎? –