如何从菜单外部访问选项菜单项
How to access an options menu item from outside the menu
如何从菜单本身之外的对象访问选项菜单项?我正在尝试为其中一个选项菜单项设置一个 alpha 值,但由于某种原因它不起作用。注释行是我试过的。
我以前看过下面的代码,但不清楚应该在哪里使用以及如何使用:
Drawable drawable = item.getIcon();
if (drawable != null) {
drawable.mutate();
drawable.setAlpha(1);
}
Activity class
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);
}
}
希望对您有所帮助
在您的 activity class 中定义这个变量:
MenuItem action_webbrowser_forward;
在菜单的inflation之后的onCreateOptionsMenu()
中,这样写:
action_webbrowser_forward = menu.findItem(R.id.action_webbrowser_forward);
然后您可以在 class:
中的任何地方使用它
action_webbrowser_forward.setEnabled(false);
但 mutate
用于可绘制对象而不是菜单项,因此通过 action_webbrowser_forward.getIcon()
获取项目的图标并对其应用变异。
好的,我花了几个小时来得到这个 solution.apparently 你可以从你的工具栏中得到菜单项。所以就我而言。
var menuItem = toolbar.menu;
现在从菜单项中获取特定项
favIcon = menuItem.findItem(R.id.favourite);
注意: favIcon 是 MenuItem declare global
现在如果你可以为这个图标做任何你想做的事情
例如。使其不可见
favIcon?.isVisible=false
如何从菜单本身之外的对象访问选项菜单项?我正在尝试为其中一个选项菜单项设置一个 alpha 值,但由于某种原因它不起作用。注释行是我试过的。
我以前看过下面的代码,但不清楚应该在哪里使用以及如何使用:
Drawable drawable = item.getIcon();
if (drawable != null) {
drawable.mutate();
drawable.setAlpha(1);
}
Activity class
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);
}
}
希望对您有所帮助
在您的 activity class 中定义这个变量:
MenuItem action_webbrowser_forward;
在菜单的inflation之后的onCreateOptionsMenu()
中,这样写:
action_webbrowser_forward = menu.findItem(R.id.action_webbrowser_forward);
然后您可以在 class:
中的任何地方使用它action_webbrowser_forward.setEnabled(false);
但 mutate
用于可绘制对象而不是菜单项,因此通过 action_webbrowser_forward.getIcon()
获取项目的图标并对其应用变异。
好的,我花了几个小时来得到这个 solution.apparently 你可以从你的工具栏中得到菜单项。所以就我而言。
var menuItem = toolbar.menu;
现在从菜单项中获取特定项
favIcon = menuItem.findItem(R.id.favourite);
注意: favIcon 是 MenuItem declare global
现在如果你可以为这个图标做任何你想做的事情
例如。使其不可见
favIcon?.isVisible=false