所以我已经搜索了很长时间,尝试了很多东西,但它似乎没有用......我最近开始为Android编程,我正在聊天 - 申请网站。
现在我已经到了一个我想在应用程序中添加表情符号/表情符号的点,通过搜索我找到了这些网站: http://blog.stylingandroid.com/archives/177 http://www.coderanch.com/t/488673/Android/Mobile/styling-items-ListView
我的代码:
private void updateList()
{
ListView list = this.getListView();
if(!parsedData.isEmpty())
{
ArrayAdapter<String> adapter = new MyAdapter(this, R.layout.list_item, parsedData);
list.setAdapter(adapter);
list.setTextFilterEnabled(true);
}
}
class MyAdapter extends ArrayAdapter<String>
{
ArrayList<String> mStrings;
LayoutInflater mInflater;
public MyAdapter(Context context, int textViewResourceId, ArrayList<String> parsedData)
{
super(context, textViewResourceId, parsedData);
mStrings = parsedData;
mInflater = (LayoutInflater) HopeloosChatActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.main, null, false);
}
TextView text = (TextView)convertView.findViewById(R.id.TextView);
SpannableStringBuilder ssb = new SpannableStringBuilder("Test ");
Bitmap emoticon = BitmapFactory.decodeResource( getResources(), R.drawable.icon);
ssb.setSpan(new ImageSpan(emoticon), 5, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
text.setText(ssb, BufferType.SPANNABLE);
return convertView;
}
}
我使用setContentView(R.layout.main);在OnCreate() - 方法
我的main.xml包含ListView部分:
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
list_item.xml包含TextView:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp"
android:autoLink="web"
android:linksClickable="true" >
</Textview>
当我运行我的代码时,我得到一个Nullpointer,因为文本为空,我有点卡住了。有人能指出我正确的方向还是帮我一点?
提前致谢!
答案 0 :(得分:1)
首先采用如下的哈希映射:
private static final HashMap<String, Integer> emoticons = new HashMap<String, Integer>();
static {
emoticons.put(":)", R.drawable.smilie1);}
其次,编写将笑脸文本转换为图像的功能
// Get image for each text smiles
public static Spannable getSmiledText(Context context, String text) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
int index;
for (index = 0; index < builder.length(); index++) {
for (Entry<String, Integer> entry : emoticons.entrySet()) {
int length = entry.getKey().length();
if (index + length > builder.length())
continue;
if (builder.subSequence(index, index + length).toString().equals(entry.getKey())) {
builder.setSpan(new ImageSpan(context, entry.getValue()), index, index + length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
index += length - 1;
break;
}
}
}
return builder;
}
第三,当您发送文本时,红色所有文本,如果它包含“:)”,则调用如下函数
chattext.(getSmiledText(getApplicationContext(),":)"));
希望它有所帮助!如果您有任何疑问,请告诉我。
答案 1 :(得分:0)
您正在使用convertView
R.layout.main
convertView = mInflater.inflate(R.layout.main, null, false);
这不对;您每次都会夸大ListView
的布局。请改用:
convertView = mInflater.inflate(R.layout.list_item, null, false);
此外,您的实际上,多亏了@Jens,这个划掉的文字并不适用;在您正在寻找的同一个对象上使用TextView
应该包含在布局中,或者convertView
可能是TextView
本身,findViewById(...)
不会继续工作findViewById
仍然可以使用。