工具栏的徽标图标是否可点击?
Is toolbar's logo icon clickable?
我已经使用过工具栏,所以现在我想在徽标图标上应用点击事件我怎样才能得到这个事件?
这是我完成的一些编码工作
Toolbar toolbar = null;
toolbar = (Toolbar) findViewById(R.id.actionToolbar);
setSupportActionBar(toolbar);
setTitle(null);
toolbar.setNavigationIcon(R.drawable.back);
toolbar.setNavigationContentDescription("BACK");
toolbar.setLogo(R.drawable.ic_launcher);
toolbar.setLogoDescription("LOGO");
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Nav", Toast.LENGTH_SHORT).show();
}
});
我在这里设置了导航图标和标志图标,所以现在我想要标志图标的点击事件,怎么可能?
您需要先获取它的参考资料
View logoView = getToolbarLogoView(toolbar);
logoView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//logo clicked
}
});
使用内容描述我们可以获得View
参考。请参阅内联评论。
public static 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<View>();
//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;
}
我在问自己同样的问题并遇到了这个问题。
我对 Nikola Despotoski 采取了类似的方法,但实现方式不同。
我做的不是方法,而是:
// Set drawable
toolbar.setLogo(ContextCompat.getDrawable(context, R.drawable.logo));
// Find logo
View view = toolbar.getChildAt(1);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform actions
}
});
有点乱,但稍后会回来复习。共享以供讨论。
appcompat:V7 ActionBar 的徽标视图 (ImageView) 的长按事件行为
ActionBar actionBar = getSupportActionBar();
actionBar.setLogo(R.drawable.logo_vjet);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
//find ActionBar View(ToolBar)
View view = getWindow().getDecorView().findViewById(android.support.v7.appcompat.R.id.action_bar);
if(view != null && view instanceof Toolbar){
try {
//find ImageView mLogoView; in Toolbar using reflect
Field logoView = view.getClass().getDeclaredField("mLogoView");
logoView.setAccessible(true);
ImageView logoImageVIew = (ImageView) logoView.get(view);
if(logoImageVIew != null){
logoImageVIew.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//do something
return false;
}
});
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
仅测试 android 7.0
我已经使用过工具栏,所以现在我想在徽标图标上应用点击事件我怎样才能得到这个事件?
这是我完成的一些编码工作
Toolbar toolbar = null;
toolbar = (Toolbar) findViewById(R.id.actionToolbar);
setSupportActionBar(toolbar);
setTitle(null);
toolbar.setNavigationIcon(R.drawable.back);
toolbar.setNavigationContentDescription("BACK");
toolbar.setLogo(R.drawable.ic_launcher);
toolbar.setLogoDescription("LOGO");
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Nav", Toast.LENGTH_SHORT).show();
}
});
我在这里设置了导航图标和标志图标,所以现在我想要标志图标的点击事件,怎么可能?
您需要先获取它的参考资料
View logoView = getToolbarLogoView(toolbar);
logoView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//logo clicked
}
});
使用内容描述我们可以获得View
参考。请参阅内联评论。
public static 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<View>();
//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;
}
我在问自己同样的问题并遇到了这个问题。 我对 Nikola Despotoski 采取了类似的方法,但实现方式不同。
我做的不是方法,而是:
// Set drawable
toolbar.setLogo(ContextCompat.getDrawable(context, R.drawable.logo));
// Find logo
View view = toolbar.getChildAt(1);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform actions
}
});
有点乱,但稍后会回来复习。共享以供讨论。
appcompat:V7 ActionBar 的徽标视图 (ImageView) 的长按事件行为
ActionBar actionBar = getSupportActionBar();
actionBar.setLogo(R.drawable.logo_vjet);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
//find ActionBar View(ToolBar)
View view = getWindow().getDecorView().findViewById(android.support.v7.appcompat.R.id.action_bar);
if(view != null && view instanceof Toolbar){
try {
//find ImageView mLogoView; in Toolbar using reflect
Field logoView = view.getClass().getDeclaredField("mLogoView");
logoView.setAccessible(true);
ImageView logoImageVIew = (ImageView) logoView.get(view);
if(logoImageVIew != null){
logoImageVIew.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//do something
return false;
}
});
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
仅测试 android 7.0