簡體   English   中英

如何在Android中使工具欄徽標可點擊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM