簡體   English   中英

如何從菜單外部訪問選項菜單項

[英]How to access an options menu item from outside the menu

如何從菜單本身之外的對象訪問選項菜單項? 我正在嘗試為選項菜單項之一設置 alpha 值,但由於某種原因它不起作用。 注釋行是我嘗試過的。

我以前見過以下代碼,但不清楚應該在哪里以及如何使用它:

    Drawable drawable = item.getIcon();
    if (drawable != null) {
        drawable.mutate();
        drawable.setAlpha(1);
    }

活動課

public class WebviewActivity extends AppCompatActivity {
    private static final String TAG = WebviewActivity.class.getSimpleName();

    WebView myWebView;
    ProgressBar myProgressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_webview);
    }

    @Override
    protected void onStart() {
        super.onStart();
        setContentView(R.layout.fragment_webview);

        String url = getIntent().getStringExtra("url");
        myWebView = findViewById(R.id.web_view);
        myWebView.setWebViewClient(new WebViewClient());
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.loadUrl(url);

        myWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                myProgressBar.setProgress(newProgress);
            }
        });
    }

    private class WebViewClient extends android.webkit.WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request){
            String url=request.getUrl().toString();
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        }
    }

    public void onBtnBackPressed() {
        if (myWebView.canGoBack()){
            myWebView.goBack();
        } else {
            onBackPressed();
        }
    }

    public void onBtnForwardPressed() {
        if (myWebView.canGoForward()){
            myWebView.goForward();
        } else {
//            menu.getItem(R.id.action_webbrowser_forward).setEnabled(false);
//            menu.getItem(R.id.action_webbrowser_forward).mutate();
//            menu.getItem(R.id.action_webbrowser_forward).setAlpha(1);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.web_browser, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        else if (item.getItemId() == R.id.action_webbrowser_back) {
            onBtnBackPressed();
        } else if (item.getItemId() == R.id.action_webbrowser_forward) {
            onBtnForwardPressed();
        }
        return super.onOptionsItemSelected(item);
    }
}

嘗試在onBtnForwardPressed函數參數上傳遞MenuItem引用:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        else if (item.getItemId() == R.id.action_webbrowser_back) {
            onBtnBackPressed();
        } else if (item.getItemId() == R.id.action_webbrowser_forward) {
            onBtnForwardPressed(item);
        }
        return super.onOptionsItemSelected(item);
    }

和 :

public void onBtnForwardPressed(MenuItem menuItem) {
        if (myWebView.canGoForward()){
            myWebView.goForward();
        } else {
            menuItem.setEnabled(false);
            menuItem.getIcon().setAlpha(50);

        }
    }

希望這可以幫助

在您的活動類中定義此變量:

MenuItem action_webbrowser_forward;

在菜單膨脹后的onCreateOptionsMenu() ,這樣寫:

action_webbrowser_forward = menu.findItem(R.id.action_webbrowser_forward);

那么你可以在課堂上的任何地方使用它:

action_webbrowser_forward.setEnabled(false);

但是mutate用於可繪制對象而不是菜單項,因此通過action_webbrowser_forward.getIcon()獲取項目的圖標並將 mutate 應用於它。

好的,我花了幾個小時來獲得這個解決方案。顯然你可以從你的工具欄中獲得菜單項。 所以在我的情況下。

var menuItem = toolbar.menu;   

現在從菜單項中獲取特定項

favIcon = menuItem.findItem(R.id.favourite);   

注意: favIcon 是 MenuItem 聲明全局
現在如果你可以為這個圖標做任何你想做的事
例如。 使其不可見

favIcon?.isVisible=false

    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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