Android 获取菜单项';TapTargetView的s视图参考
我正在尝试使用菜单项,但无法查看它 我的代码:Android 获取菜单项';TapTargetView的s视图参考,android,android-layout,android-view,menuitem,android-menu,Android,Android Layout,Android View,Menuitem,Android Menu,我正在尝试使用菜单项,但无法查看它 我的代码: @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu, menu); new TapTargetSequence(this) .targets(
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
new TapTargetSequence(this)
.targets(
TapTarget.forView(menu.findItem(R.id.add).getActionView(), "Gonna"))
.listener(new TapTargetSequence.Listener() {
// This listener will tell us when interesting(tm) events happen in regards
// to the sequence
@Override
public void onSequenceFinish() {
// Yay
}
@Override
public void onSequenceStep(TapTarget lastTarget, boolean targetClicked) {
}
@Override
public void onSequenceCanceled(TapTarget lastTarget) {
// Boo
}
});
return true;
}
错误:
java.lang.IllegalArgumentException:为目标提供空视图
我如何解决这个问题?
我尝试将android:actionViewClass
添加到xml文件中,但没有成功。您可以使用API获取MenuItem
视图的引用
将以下内容作为菜单的xml
:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="ifRoom"/>
</menu>
使用
TapTarget.forToolbarMenuItem
代替TapTarget.forView
像这样更改代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
new TapTargetSequence(this)
.targets(
TapTarget.forToolbarMenuItem(toolbar,R.id.add, "Gonna"))
.listener(new TapTargetSequence.Listener() {
// This listener will tell us when interesting(tm) events happen in regards
// to the sequence
@Override
public void onSequenceFinish() {
// Yay
}
@Override
public void onSequenceStep(TapTarget lastTarget, boolean targetClicked) {
}
@Override
public void onSequenceCanceled(TapTarget lastTarget) {
// Boo
}
});
return true;
}
另一种方法是在菜单项中使用
“app:actionLayout=“@layout/some\u layout”
,并且一些\u布局可以将项目作为其内部视图。然后,在活动中,您可以使用:
MenuItem MenuItem=menu.findItem(R.id.menu_项);//获取菜单项
ImageView menuView=menuItem.getActionView().findViewById(R.id.some_图标);
可以使用此菜单视图设置点击目标
TapTargetView.showFor(活动、getTapTarget(菜单视图、标题、消息),
新建TapTargetView.Listener()
{
@凌驾
public void onTargetClick(TapTargetView视图)
{
super.onTargetClick(视图);
查看。驳回(true);
}
@凌驾
在OuterCircleClick上的公共无效(点击TargetView视图)
{
super.onOuterCircleClick(视图);
查看。驳回(true);
}
});
经过反复搜索和测试,终于找到了一个可行的解决方案
只需在onCreateOptionsMenu()
中获取对菜单项的引用。启动一个处理程序,以便在获取id引用之前正确膨胀视图。否则,您将获得空视图错误
如何获取
工具栏
对象?
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
new TapTargetSequence(this)
.targets(
TapTarget.forToolbarMenuItem(toolbar,R.id.add, "Gonna"))
.listener(new TapTargetSequence.Listener() {
// This listener will tell us when interesting(tm) events happen in regards
// to the sequence
@Override
public void onSequenceFinish() {
// Yay
}
@Override
public void onSequenceStep(TapTarget lastTarget, boolean targetClicked) {
}
@Override
public void onSequenceCanceled(TapTarget lastTarget) {
// Boo
}
});
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu,menu);
new Handler().post(new Runnable() {
@Override
public void run() {
final View view = findViewById(R.id.askHelp);
TapTargetView.showFor(BasicInformation.this, // `this` is an Activity
TapTarget.forView(view, "You can tap here to get Chat Support")
// All options below are optional
.outerCircleColor(R.color.colorAccent) // Specify a color for the outer circle
.outerCircleAlpha(0.96f) // Specify the alpha amount for the outer circle
.targetCircleColor(R.color.white) // Specify a color for the target circle
.titleTextSize(30) // Specify the size (in sp) of the title text
.titleTextColor(R.color.white) // Specify the color of the title text
.textColor(R.color.white) // Specify a color for both the title and description text
.textTypeface(Typeface.SANS_SERIF) // Specify a typeface for the text
.dimColor(R.color.black) // If set, will dim behind the view with 30% opacity of the given color
.drawShadow(true) // Whether to draw a drop shadow or not
.cancelable(true) // Whether tapping outside the outer circle dismisses the view
.tintTarget(true) // Whether to tint the target view's color
.transparentTarget(false) // Specify whether the target is transparent (displays the content underneath)
.targetRadius(60), // Specify the target radius (in dp)
new TapTargetView.Listener() { // The listener can listen for regular clicks, long clicks or cancels
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view); // This call is optional
//doSomething();
}
});
}
});
return true;
}