Android-如何使用Html.ImageGetter在edittext或文本视图中显示图像数量
我想做的是,当按下一个按钮时,edittext字段会出现一个图像 问题是,我想添加几次图像-这意味着每次单击图像都会添加到字符串中 问题是,在下一个代码中,我只看到最后按下的图像,而之前的图像变成了一个带有字母“obj”的小盒子 这是我的活动,有人能看到问题是什么吗Android-如何使用Html.ImageGetter在edittext或文本视图中显示图像数量,android,html,android-edittext,Android,Html,Android Edittext,我想做的是,当按下一个按钮时,edittext字段会出现一个图像 问题是,我想添加几次图像-这意味着每次单击图像都会添加到字符串中 问题是,在下一个代码中,我只看到最后按下的图像,而之前的图像变成了一个带有字母“obj”的小盒子 这是我的活动,有人能看到问题是什么吗 public class MainActivity extends Activity implements ImageGetter, OnClickListener { EditText et; ImageButton ib1; I
public class MainActivity extends Activity implements ImageGetter, OnClickListener {
EditText et;
ImageButton ib1;
ImageButton ib2;
ImageButton ib3;
Spanned spanned;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("main", "0001");
et = (EditText)findViewById(R.id.editText1);
ib1 = (ImageButton) findViewById(R.id.imageButton1);
ib2 = (ImageButton) findViewById(R.id.imageButton2);
ib3 = (ImageButton) findViewById(R.id.imageButton3);
ib1.setOnClickListener(this);
ib2.setOnClickListener(this);
ib3.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public Drawable getDrawable(String arg0) {
int id = 0;
if(arg0.equals("zero.png")){
id = R.drawable.emoji_0030;
}
if(arg0.equals("slash.png")){
id = R.drawable.emoji_0023;
}
LevelListDrawable d = new LevelListDrawable();
Drawable empty = getResources().getDrawable(id);
d.addLevel(0, 0, empty);
d.setBounds(0, 0, empty.getIntrinsicWidth(), empty.getIntrinsicHeight());
return d;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.imageButton2:
toDisplay("zero.png");
break;
case R.id.imageButton1:
toDisplay("slash.png");
break;
}
}
public void toDisplay(String input){
String first = et.getText().toString();
String second = "<img src ='"+input+"'>";
String last = first +second;
spanned = Html.fromHtml(last, this, null);
et.setText(spanned);
et.setTextSize(16);
}
public类MainActivity扩展活动实现ImageGetter、OnClickListener{
编辑文本;
图像按钮ib1;
图像按钮ib2;
图像按钮ib3;
跨越跨越;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
日志d(“主要”、“0001”);
et=(EditText)findViewById(R.id.editText1);
ib1=(ImageButton)findViewById(R.id.imageButton1);
ib2=(ImageButton)findViewById(R.id.imageButton2);
ib3=(ImageButton)findViewById(R.id.imageButton3);
ib1.setOnClickListener(此);
ib2.setOnClickListener(此);
ib3.setOnClickListener(本);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
公共可提取getDrawable(字符串arg0){
int id=0;
if(arg0.equals(“zero.png”)){
id=R.drawable.emoji_0030;
}
if(arg0.equals(“slash.png”)){
id=R.drawable.emoji_0023;
}
LevelListDrawable d=新的LevelListDrawable();
Drawable empty=getResources().getDrawable(id);
d、 addLevel(0,0,空);
d、 setBounds(0,0,empty.getIntrinsicWidth(),empty.getIntrinsicHeight());
返回d;
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.imageButton2:
toDisplay(“zero.png”);
打破
案例R.id.imageButton1:
显示(“slash.png”);
打破
}
}
要显示的公共void(字符串输入){
String first=et.getText().toString();
字符串秒=”;
字符串last=first+second;
span=Html.fromHtml(last,this,null);
et.setText(跨距);
et.setTextSize(16);
}
我认为问题出在et.getText().toString()
中。它返回一些与HTML等效的文本,但不是HTML源代码本身。请尝试将更改为显示(字符串输入)
:
编辑
public void toDisplay(String input){
String first = Html.toHtml(et.getText());
String second = "<img src ='"+input+"'>";
String last = first +second;
spanned = Html.fromHtml(last, this, null);
et.setText(spanned);
et.setTextSize(16);
}
public void显示(字符串输入){
String first=Html.toHtml(et.getText());
字符串秒=”;
字符串last=first+second;
span=Html.fromHtml(last,this,null);
et.setText(跨距);
et.setTextSize(16);
}
但对我来说,它在新行上添加了新的图像。发生这种情况的原因是Html.toHtml()
通过标记来包装文本。我认为你必须使用字符串last=first+second;
来取代简单的连接,在中插入
希望有帮助。这不是一个好主意,因为如果我在编辑文本中写了一些东西,然后添加了一个图像,文本就会被删除。遗憾的是,它会将添加到每一行-它看起来确实很糟糕,不是在一行中,因为我希望这是修复它的最简单方法将字符串last=first+second;
替换为字符串last=first.isEmpty()?第二:第一。替换(“”,第二+“”);
。但我相信您可以根据您的特定期望找到更好的解决方案。