package com.shang.test;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;
import com.shang.test.Face.GridAdapter; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Typeface; import android.graphics.Paint.FontMetricsInt; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.Html; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.TextWatcher; import android.text.Html.ImageGetter; import android.text.style.ForegroundColorSpan; import android.text.style.LeadingMarginSpan; import android.text.style.LineHeightSpan; import android.text.style.StyleSpan; import android.text.style.TextAppearanceSpan; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; import android.widget.ListView; import android.widget.QuickContactBadge; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView.OnEditorActionListener;
/** * * @author qintao * */ public class TestBaseAdapter extends Activity implements OnEditorActionListener {
private ListView mListView; private View mMms_content; private static int i = 0; private EditText mTextEditor; private TextView mTextCounter; Pattern mHighlight; private Context contexts; private BaseListAdapter baseListAdapter = null; private int[] list; private GridView gridview ; private GridAdapter adapter; private EditText mEditText; private Button send;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.baseadapterlist); this.contexts = this; list = Smileys.sIconIds; gridview = (GridView) findViewById(R.id.faces); getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); // mTextEditor = (EditText)findViewById(R.id.embedded_text_editor);
// mTextEditor.requestFocus();
// mTextEditor.setOnEditorActionListener(this);
// mTextEditor.addTextChangedListener(mTextEditorWatcher);
mListView = (ListView) findViewById(R.id.baselist); Button face = (Button)findViewById(R.id.face); face.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub
gridview.setVisibility(View.VISIBLE); } }); SmileyParser.init(getBaseContext()); ((ListView) mListView).setDivider(null); if(baseListAdapter == null) baseListAdapter = new BaseListAdapter(this); mListView.setAdapter(baseListAdapter); mEditText = (EditText) findViewById(R.id.edit_text); adapter = new GridAdapter(contexts); adapter.setList(list); gridview.setAdapter(adapter); gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ImageGetter imageGetter = new ImageGetter() { public Drawable getDrawable(String source) { int id = Integer.parseInt(source); Drawable d = getResources().getDrawable(id); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); return d; } }; CharSequence cs = Html.fromHtml("",imageGetter, null); mEditText.getText().append(cs); //faceContent =FilterHtml(Html.toHtml(mEditText.getText()));
} }); send = (Button)findViewById(R.id.send); send.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub
//Toast.makeText(TestBaseAdapter.this, Html.toHtml(mEditText.getText()), Toast.LENGTH_SHORT).show();
Message msg = new Message(); msg.what=0; mHandler.sendMessage(msg); } }); new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub
try { Thread.sleep(20000); Message msg = new Message(); msg.what=0; mHandler.sendMessage(msg); } catch (InterruptedException e) { // TODO Auto-generated catch block
e.printStackTrace(); } } }).start(); }
public Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if(msg.what == 0){ List<HashMap<String, Object>> a = getData(); if(!"".equals(mEditText.getText())){ HashMap<String, Object> bHashMap = new HashMap<String, Object>(); bHashMap.put("image", R.drawable.s); bHashMap.put("title", ""); bHashMap.put("info", FilterHtml(Html.toHtml(mEditText.getText()))); bHashMap.put("times", "cccccccccc"); a.add(bHashMap); } a.get(2).put("info", "aaaaaaaaaaaaa"); a.get(3).put("info","bbbbbbbbbbbbbbb"); //BaseListAdapter adapter = new BaseListAdapter(contexts);
baseListAdapter.reSetList(a); baseListAdapter.notifyDataSetChanged(); System.out.println("ccccccccccccccc"); }else{ System.out.println("bbbb"); } } }; private void ensureCorrectButtonHeight() { int currentTextLines = mTextEditor.getLineCount(); if (currentTextLines <= 2) { mTextCounter.setVisibility(View.GONE); } else if (currentTextLines > 2 && mTextCounter.getVisibility() == View.GONE) { // Making the counter invisible ensures that it is used to correctly
// calculate the position of the send button even if we choose not
// to
// display the text.
mTextCounter.setVisibility(View.INVISIBLE); } }
private final TextWatcher mTextEditorWatcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
public void onTextChanged(CharSequence s, int start, int before, int count) { // This is a workaround for bug 1609057. Since onUserInteraction()
// is
// not called when the user touches the soft keyboard, we pretend it
// was
// called when textfields changes. This should be removed when the
// bug
// is fixed.
onUserInteraction();
// mWorkingMessage.setText(s);
// updateSendButtonState();
// updateCounter(s, start, before, count);
ensureCorrectButtonHeight(); }
@Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub
} };
private List<HashMap<String, Object>> getData() { List<HashMap<String, Object>> maps = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("image", R.drawable.s); map.put("title", ""); map.put("info", "噢~好吧,:-):-):-):-)agc@126.com"+""+""); map.put("times", "10:30"); maps.add(map);
map = new HashMap<String, Object>(); map.put("image", R.drawable.d); map.put("title", ""); map.put("info", "o_O 13888888888 记住"+""); map.put("times", "半天前"); maps.add(map);
map = new HashMap<String, Object>(); map.put("image", R.drawable.s); map.put("title", ""); map.put("info", "O:-)哎呀~别问了!"); map.put("times", "1天前"); maps.add(map);
map = new HashMap<String, Object>(); map.put("image", R.drawable.d); map.put("title", ""); map.put("info", " 推荐阿"); map.put("times", "1天前"); maps.add(map); return maps; }
private class BaseListAdapter extends BaseAdapter implements OnClickListener {
private Context mContext; private LayoutInflater inflater; private List<HashMap<String, Object>> mList;
public BaseListAdapter(Context mContext) { this.mContext = mContext; mList = getData(); inflater = LayoutInflater.from(mContext); }
public void reSetList(List<HashMap<String, Object>> list){ Log.v("mlist", list.get(2).get("info")+"********************"); mList = list; } @Override public int getCount() { return mList.size(); }
@Override public Object getItem(int position) { return null; }
@Override public long getItemId(int position) { return 0; }
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null;
// QuickContactBadge mLeft_Avatar = (QuickContactBadge)
// findViewById(R.id.left_avatar);
// QuickContactBadge mRight_Avatar = (QuickContactBadge)
// findViewById(R.id.right_avatar);
// mMms_content.setBackgroundResource(R.drawable.droid_widget_focused);
// mMms_content.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.droid_widget_focused));
QuickContactBadge mLeft_Avatar = null; QuickContactBadge mRight_Avatar = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.testbaseadapter, null); viewHolder.img = (ImageView) convertView.findViewById(R.id.img); viewHolder.title = (TextView) convertView.findViewById(R.id.title); viewHolder.info = (TextView) convertView.findViewById(R.id.info); viewHolder.times = (TextView) convertView.findViewById(R.id.times); // viewHolder.button = (Button)
// convertView.findViewById(R.id.basebutton);
mMms_content = (View) convertView.findViewById(R.id.mms_content); mMms_content.setBackgroundResource(R.drawable.droid_widget_focused); mLeft_Avatar = (QuickContactBadge) convertView.findViewById(R.id.left_avatar); mRight_Avatar = (QuickContactBadge) convertView.findViewById(R.id.right_avatar);
mLeft_Avatar.setImageDrawable(getResources().getDrawable(R.drawable.icon)); mRight_Avatar.setImageDrawable(getResources().getDrawable(R.drawable.icon)); convertView.setTag(viewHolder); if (i % 2 == 0) { mLeft_Avatar.setVisibility(View.GONE); mRight_Avatar.setVisibility(View.VISIBLE); // viewHolder.times.setVisibility(View.GONE);
viewHolder.times.setText((CharSequence) mList.get(position).get("times")); mMms_content.setBackgroundResource(R.drawable.droid_widget_focused);
} else { mLeft_Avatar.setVisibility(View.VISIBLE); mRight_Avatar.setVisibility(View.GONE); viewHolder.times.setVisibility(View.GONE); // viewHolder.times.setText((CharSequence)
// getData().get(position).get("times"));
mMms_content.setBackgroundResource(R.drawable.droid_widget_focused_left); Log.v("++++++++++++", "aaaaaaaa"); }
} else { viewHolder = (ViewHolder) convertView.getTag(); } Log.v("i----", "" + i); i++; System.out.println("viewHolder = " + viewHolder); CharSequence formattedMessage; formattedMessage = formatMessage((String) mList.get(position).get("info"),mHighlight); viewHolder.img.setBackgroundResource((Integer) mList.get(position).get("image")); viewHolder.title.setText((CharSequence) mList.get(position).get("title")); //viewHolder.info.setText((CharSequence) getData().get(position).get("info"));
//viewHolder.info.setText(formattedMessage);
// viewHolder.button.setOnClickListener(this);
ImageGetter imageGetter = new ImageGetter() { public Drawable getDrawable(String source) { int id = Integer.parseInt(source); Drawable d = getResources().getDrawable(id); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); return d; } }; CharSequence cs = Html.fromHtml(mList.get(position).get("info").toString(),imageGetter, null); //mEditText.getText().append(cs);
viewHolder.info.setText(cs); return convertView; }
class ViewHolder { ImageView img; TextView title; TextView info; TextView times; // Button button;
}
@Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.basebutton: showInfo(); break; } }
private void showInfo() { new AlertDialog.Builder(TestBaseAdapter.this).setTitle("my listview").setMessage("introduce....").setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub
} }).show(); } }
@Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (event != null) { // if shift key is down, then we want to insert the '\n' char in the
// TextView;
// otherwise, the default action is to send the message.
// dengll 20110228 modify for PROD02224767 begin
/* * if (!event.isShiftPressed()) { */ if (!event.isShiftPressed() && event.getKeyCode() != KeyEvent.KEYCODE_ENTER) { // dengll 20110228 modify for PROD02224767 end
// if (isPreparedForSending()) {
// confirmSendMessageIfNeeded();
// }
return true; } return false; }
// if (isPreparedForSending()) {
// confirmSendMessageIfNeeded();
// }
return true; } private LeadingMarginSpan mLeadingMarginSpan;
private LineHeightSpan mSpan = new LineHeightSpan() { public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v, FontMetricsInt fm) { fm.ascent -= 10; } };
ForegroundColorSpan mColorSpan = null; private CharSequence formatMessage(String body,Pattern highlight) { //CharSequence template = getResources().getText(R.string.name_colon);
SpannableStringBuilder buf = new SpannableStringBuilder();
// boolean hasSubject = !TextUtils.isEmpty(subject);
// if (hasSubject) {
// buf.append(getResources().getString(R.string.inline_subject, subject));
// }
String contentType = null; if (!TextUtils.isEmpty(body)) { // Converts html to spannable if ContentType is "text/html".
if (contentType != null ) { buf.append("\n"); buf.append(Html.fromHtml(body)); } else { // if (hasSubject) {
// buf.append(" - ");
// }
SmileyParser parser = SmileyParser.getInstance(); buf.append(parser.addSmileySpans(body)); } } // If we're in the process of sending a message (i.e. pending), then we
// show a "Sending..."
// string in place of the timestamp.
// We always show two lines because the optional icon bottoms are
// aligned with the
// bottom of the text field, assuming there are two lines for the
// message and the sent time.
int startOffset = buf.length(); StringBuilder sentTo = new StringBuilder(); try { // ContactList recipients = ((ComposeMessageActivity) mContext).mConversation.getRecipients();
// if (recipients.size() != 1 && !msgItem.isMms()) {
// boolean fromcontact = false;
// Iterator it = recipients.iterator();
//
// while (it.hasNext()) {
// Contact recipient = it.next();
// if (recipient.getNumber().equals(msgItem.getmSentTo().toString())) {
// sentTo.append("<" + recipient.getNameAndNumber() + ">");
// fromcontact = true;
// break;
// }
//
// }
// if (!fromcontact) {
// sentTo.append("<" + msgItem.getmSentTo() + ">");
// }
// }
} catch (Exception e) { } if (sentTo.length() > 0) { buf.append("\n"); buf.append(sentTo); buf.setSpan(null, startOffset, buf.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); buf.setSpan(mSpan, startOffset + 1, buf.length(), 0);
// Make the timestamp text not as dark
buf.setSpan(mColorSpan, startOffset, buf.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); }
if (highlight != null) { Matcher m = highlight.matcher(buf.toString()); while (m.find()) { buf.setSpan(new StyleSpan(Typeface.BOLD), m.start(), m.end(), 0); } } buf.setSpan(mLeadingMarginSpan, 0, buf.length(), 0); return buf; } public class GridAdapter extends BaseAdapter {
private class GridHolder { ImageView appImage; }
private Context context;
private LayoutInflater mInflater;
private int[] list;
public GridAdapter(Context c) { super(); this.context = c; }
public void setList(int[] list) { this.list = list; mInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() { // TODO Auto-generated method stub
return list.length; }
@Override public Object getItem(int index) {
return list[index]; }
@Override public long getItemId(int index) { return index; }
@Override public View getView(int index, View convertView, ViewGroup parent) { GridHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.face_item, null); holder = new GridHolder(); holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage); convertView.setTag(holder); holder.appImage.setImageDrawable(context.getResources() .getDrawable(list[index])); }else{ holder = (GridHolder) convertView.getTag(); } return convertView; }
} @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 按下键盘上返回按钮
if (keyCode == KeyEvent.KEYCODE_BACK) { gridview.setVisibility(View.GONE); return true; } else {
return super.onKeyDown(keyCode, event);
} } public static String UnicodeToGBK2(String s){ String[] k = s.split(";") ; String rs = "" ; for(int i=0;i<k.length;i++) { int strIndex=k[i].indexOf(""); String newstr = k[i]; if(strIndex>-1) { String kstr = ""; if(strIndex>0) { kstr = newstr.substring(0,strIndex); rs+=kstr; newstr = newstr.substring(strIndex); } int m = Integer.parseInt(newstr.replace("","")); char c = (char)m ; rs+= c ; } else { rs+=k; } } return rs; } public static String FilterHtml(String str){ str = str .replaceAll("<(?!br|img)[^>]+>", "").trim(); return UnicodeToGBK2(str); }
}
|