java - ContextMenuItemSelected 和一半不工作
问题描述
我正在尝试做应用程序,在其中单击一个文本并出现菜单,我可以用它来更改文本的颜色,这是有效的。我应该点击的第二个文本,菜单应该出现并将文本的样式更改为粗体、斜体或正常。但是当我点击其中任何一个时,什么都没有发生。你能帮我解决这个问题吗?谢谢!
package com.example.menu;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.ActionMode;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import static com.example.menu.R.menu.menubarva;
public class MainActivity extends AppCompatActivity {
MenuItem pozadi1,pozadi2,pozadi3,pozadi4;
RelativeLayout pozadi;
TextView styl;
TextView barva;
MenuItem red,blue,green;
MenuItem normalni,tucne,kurziva;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pozadi = (RelativeLayout) findViewById(R.id.pozadi);
pozadi1 = (MenuItem) findViewById(R.id.pozadi1);
pozadi2 = (MenuItem) findViewById(R.id.pozadi2);
pozadi3 = (MenuItem) findViewById(R.id.pozadi3);
pozadi4 = (MenuItem) findViewById(R.id.pozadi4);
styl = (TextView) findViewById(R.id.styl);
barva = (TextView) findViewById(R.id.barva);
red = (MenuItem) findViewById(R.id.red);
blue = (MenuItem) findViewById(R.id.blue);
green = (MenuItem) findViewById(R.id.green);
normalni = (MenuItem) findViewById(R.id.normal);
tucne = (MenuItem) findViewById(R.id.tucne);
kurziva = (MenuItem) findViewById(R.id.kurziva);
styl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registerForContextMenu(styl);
v.showContextMenu();
}
});
barva.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
registerForContextMenu(barva);
v.showContextMenu();
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
if(v.getId()==R.id.styl){
new MenuInflater(this).inflate(R.menu.menustyl,menu);
}
else if (v.getId()==R.id.barva){
new MenuInflater(this).inflate(menubarva,menu);
}
// MenuInflater barvy = getMenuInflater();
//barvy.inflate(R.menu.menubarva,menu);
//return super.onCreateContextMenu(Menu);
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.blue:
barva.setTextColor(Color.BLUE);
return true;
case R.id.green:
barva.setTextColor(Color.GREEN);
return true;
case R.id.red:
barva.setTextColor(Color.RED);
return true;
case R.id.tucne:
styl.setTypeface(null,Typeface.BOLD);
case R.id.kurziva:
styl.setTypeface(null, Typeface.ITALIC);
case R.id.normal:
styl.setTypeface(null, Typeface.NORMAL);
default:
return super.onContextItemSelected(item);
}
}
//KOD NA ZMĚNU POZADÍ
//////////////////////////////////////////////////////////////////////////
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.menu1,menu);
return super.onCreateOptionsMenu((Menu) menu);
}
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.pozadi1:
pozadi.setBackgroundResource(R.drawable.pozadi1);break;
case R.id.pozadi2:
pozadi.setBackgroundResource(R.drawable.pozadi2);break;
case R.id.pozadi3:
pozadi.setBackgroundResource(R.drawable.pozadi3);break;
case R.id.pozadi4:
pozadi.setBackgroundResource(R.drawable.pozadi4);break;
}
return super.onOptionsItemSelected(item);
}
///////////////////////////////////////////////////////////////////////////////////
}
解决方案
您忘记了开关中的中断语句
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.blue:
barva.setTextColor(Color.BLUE);
return true;
case R.id.green:
barva.setTextColor(Color.GREEN);
return true;
case R.id.red:
barva.setTextColor(Color.RED);
return true;
case R.id.tucne:
styl.setTypeface(null,Typeface.BOLD);
break;
case R.id.kurziva:
styl.setTypeface(null, Typeface.ITALIC);
break;
case R.id.normal:
styl.setTypeface(null, Typeface.NORMAL);
break;
default:
return super.onContextItemSelected(item);
}
}
这应该工作
推荐阅读
- php - PHP trim() 不能删除空格
- php - 该列存在但无法保存
- python - 如何比较两个数据框并返回有差异的列?
- python - 通过 pip 安装的脚本:/usr/local/bin/ vs /usr/bin
- html - mansory 网格项目图像需要设置没有高度和宽度
- javascript - 如何比较两个全年日期
- fusionauth - 如何使用应用程序 A 的两个因素和应用程序 B 的没有两个因素的相同用户登录?
- javascript - 如何在新 div 中包装每三个唯一的子元素
- database - 如何模拟 ping 命令
- jmeter - 即使在生产中关闭了代码,我的 Jmeter 脚本也通过了