我有一个在 EditText 的上下文菜单上触发的对话框。 Dialog设置EditText的红、绿、蓝量。问题是当我单击肯定按钮时会发生运行时错误。上面的项目工作正常,它们在 EditText 中设置文本的颜色,但 rgbDialog 没有。
我认为问题出现在这里:
etRed = (EditText)findViewById(R.id.etRed);
etGreen = (EditText)findViewById(R.id.etGreen);
etBlue = (EditText)findViewById(R.id.etBlue);
但我不知道如何正确初始化 etRed、etGreen 和 etBlue。我认为我应该在 findView 之前放置一些东西,例如
etRed = (EditText)Dialog.findViewById(R.id.etRed);
但不知道是什么,因为一切都发生在同一个方法中(onContextItemSelected)
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.white:
temp.setTextColor(Color.WHITE);
break;
case R.id.red:
temp.setTextColor(Color.RED);
break;
case R.id.green:
temp.setTextColor(Color.GREEN);
break;
case R.id.rgb:
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setTitle("choose the amount of red green and blue");
LayoutInflater inflater = this.getLayoutInflater();
dialogBuilder.setView(inflater.inflate(R.layout.colors, null));
dialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
etRed = (EditText)findViewById(R.id.etRed);
etGreen = (EditText)findViewById(R.id.etGreen);
etBlue = (EditText)findViewById(R.id.etBlue);
red=etRed.getText().toString();
green = etGreen.getText().toString();
blue = etBlue.getText().toString();
intRed = Integer.parseInt(red);
intGreen = Integer.parseInt(green);
intBlue = Integer.parseInt(blue);
temp.setTextColor(Color.rgb(intRed, intGreen, intBlue));
}
});
dialogBuilder.setNegativeButton("CANCEL", null);
AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();
break;
default:
break;
}
return super.onContextItemSelected(item);
}
EditText 温度设置如下,对于高于 RGB 的项目效果很好
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context, menu);
temp = (EditText)findViewById(v.getId());
super.onCreateContextMenu(menu, v, menuInfo);
}
最佳答案
您可以使用如下所示的方法从正确的布局中调用 findViewById:
View dialogView = inflater.inflate(R.layout.colors, null);
dialogBuilder.setView(dialogView );
当您在 onClick 中调用 findViewById 时,您可以:
etRed = (EditText)dialogView.findViewById(R.id.etRed);
etGreen = (EditText)dialogView.findViewById(R.id.etGreen);
etBlue = (EditText)dialogView.findViewById(R.id.etBlue);
检查这是否有帮助。
关于java - 设置EditText的文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25267653/