[英]How to make toolbar logo clickable in android
我想使操作欄可點擊。
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle(null);
getSupportActionBar().setLogo(R.drawable.ic_launcher);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
我嘗試過此代碼,但沒有成功:-
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch(item.getItemId()){
case R.id.action_search:
Intent search = new Intent(MainActivity.this,SearchActivity.class);
startActivity(search);
return true;
case R.id.login:
if(session.checkLogin())
finish();
else {
Intent intent = new Intent(MainActivity.this,MyAccount.class);
startActivity(intent);
}
return true;
case R.id.my_order:
alert.showAlertDialog(MainActivity.this,"Alert","This Page Under Maintenance",false);
return true;
case R.id.wishlist:
if(session.checkLogin()){
finish();
}
else {
Intent wishlistIntent = new Intent(MainActivity.this,WishList.class);
startActivity(wishlistIntent);
}
return true;
case android.R.id.home:
Intent intent = new Intent(MainActivity.this,MainActivity.class);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
它可以幫助我如何制作可點擊的徽標。我是android開發中的新手,請幫助我。 提前致謝!
工具欄基本上只是一個ViewGroup,因此您可以向其中添加TextView並監聽類似的onClick事件。
Add TextView to Toolbar in XML:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_top"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="@color/action_bar_bkgnd"
app:theme="@style/ToolBarTheme" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Settings"
android:id="@+id/toolbar_title" />
</android.support.v7.widget.Toolbar>
監聽您的活動中的點擊:
toolbarTop.findViewById(R.id.toolbar_title).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"Clicked");
}
});
Toolbar
類動態生成其子View
,因此默認情況下它們都不具有資源ID。 另外,該類不會以我能找到的任何方式公開公開徽標View
。 但是,我們可以稍微反思一下即可獲得對該View
的引用。
private void setLogoOnClickListener(Toolbar toolbar, OnClickListener listener) {
try {
Class<?> toolbarClass = Toolbar.class;
Field logoField = toolbarClass.getDeclaredField("mLogoView");
logoField.setAccessible(true);
ImageView logoView = (ImageView) logoField.get(toolbar);
if(logoView != null) {
logoView.setOnClickListener(listener);
}
}
catch (NoSuchFieldException |
IllegalAccessException e) {
e.printStackTrace();
}
}
在Toolbar
上設置徽標后,必須調用此方法。 例如:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setLogo(R.drawable.ic_launcher);
setLogoOnClickListener(toolbar, new OnClickListener() {
@Override
public void onClick(View p1) {
Toast.makeText(MainActivity.this, "Logo clicked", 0).show();
}
}
);
這是我的解決方案:
Toolbar toolbar = ...
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
Drawable logo = ContextCompat.getDrawable(this, R.mipmap.ic_launcher);
getSupportActionBar().setIcon(logo);
for (int i = 0; i < toolbar.getChildCount(); i++) {
if (toolbar.getChildAt(i) instanceof ImageView) {
ImageView maybeLogo = ((ImageView) toolbar.getChildAt(i));
if (maybeLogo.getDrawable() == logo) {
maybeLogo.setOnClickListener(v -> mDrawerLayout.openDrawer(Gravity.START));
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.