package com.hellodev.lightme.activity; import java.io.IOException; import org.xmlpull.v1.XmlPullParserException; import android.app.ActionBar; import android.app.Activity; import android.content.Intent; import android.content.res.ColorStateList; import android.content.res.XmlResourceParser; import android.net.Uri; import android.os.Bundle; import android.text.Selection; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextPaint; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.text.style.TextAppearanceSpan; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.hellodev.lightme.FlashController; import com.hellodev.lightme.R; import com.hellodev.lightme.util.CommonDataHelper; import com.hellodev.lightme.util.MConnectHelper; import com.hellodev.lightme.util.MDisplayHelper; import com.hellodev.lightme.util.SmartBarUtils; import com.umeng.analytics.MobclickAgent; public class AboutActivity extends Activity { private TextView tvVerison; private LinearLayout membersContainer; private View[] members = new View[3]; private String names[] = {"@dichengsiyu","@川沢悪童","@沦陷Lesaw"}; private String descriptions[] = {"一枚程序员","主题 Details 的设计师","主题 写意 的设计师"}; private String nameUrls[] = {"http://weibo.com/dichengsiyu", "http://weibo.com/p/1005051730920503", "http://weibo.com/otakuf"}; private final static String URL_XY = "ad34c12290ae4e0ba30a6e0a4f4055ad"; private final static String URL_DETAILS = "dc5b775e846e41ac8f449b212e44bdfa"; private MConnectHelper connecter; private MDisplayHelper displayer; private ColorStateList desColors; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); displayer = new MDisplayHelper(); connecter = new MConnectHelper(this); initActionBar(); initView(); initMembers(); } @Override protected void onResume() { super.onResume(); MobclickAgent.onResume(this); } @Override protected void onPause() { super.onPause(); MobclickAgent.onPause(this); } @Override protected void onDestroy() { super.onDestroy(); desColors = null; } @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId() == android.R.id.home) { finish(); } return super.onOptionsItemSelected(item); } private void initView() { tvVerison = (TextView) findViewById(R.id.tv_version); String version = CommonDataHelper.getCurrentAppVersionInfo(this, getResources().getString(R.string.format_version_v)); tvVerison.setText(version); membersContainer = (LinearLayout) findViewById(R.id.members); } private void initActionBar() { ActionBar actionBar = getActionBar(); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP); actionBar.setDisplayHomeAsUpEnabled(true); int icon = FlashController.getInstance().islisenseEnable()? R.drawable.ic_logo: R.drawable.ic_logo_locked; actionBar.setIcon(icon); SmartBarUtils.setBackIcon(actionBar, getResources().getDrawable(R.drawable.ic_back)); } private void initMembers() { XmlResourceParser nameColorParser = getResources().getXml(R.color.name_url_color_list); try { desColors= ColorStateList.createFromXml(getResources(),nameColorParser); }catch(XmlPullParserException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } LayoutInflater mInflater = LayoutInflater.from(this); members[0] = mInflater.inflate(R.layout.member, null); generateMember(0, members[0], R.drawable.ico_sy, null, null); membersContainer.addView(members[0]); members[1] = mInflater.inflate(R.layout.member, null); generateMember(1, members[1], R.drawable.ico_cc, "Details", URL_DETAILS); membersContainer.addView(members[1]); members[2] = mInflater.inflate(R.layout.member, null); generateMember(2, members[2], R.drawable.ico_lx, "写意", URL_XY); membersContainer.addView(members[2]); } //FIXME 考虑用viewHolder的形式,最后能回收图片资源 private View generateMember(int pos, View root, int avatar, String desKeyword, String desUrl) { ImageView imgAvatar = (ImageView) root.findViewById(R.id.avatar); imgAvatar.setImageResource(avatar); TextView tvName = (TextView) root.findViewById(R.id.name); String name = names[pos]; String nameUrl = nameUrls[pos]; tvName.setText(name); tvName.setTag(nameUrl); tvName.setOnClickListener(memberNameOnClickListener); TextView tvDescription = (TextView) root.findViewById(R.id.description); String des = descriptions[pos]; if(desKeyword != null && desUrl != null) { int start = des.indexOf(desKeyword); TextAppearanceSpan desSpan = new TextAppearanceSpan("monospace",android.graphics.Typeface.BOLD, displayer.dpiToPx(16), null, desColors); DesURLSpan desKeywordSpan = new DesURLSpan(desUrl); SpannableStringBuilder desBuilder = new SpannableStringBuilder(des); desBuilder.setSpan(desSpan, start, start + desKeyword.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); desBuilder.setSpan(desKeywordSpan, start, start + desKeyword.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tvDescription.setText(desBuilder); tvDescription.setTag(desKeyword); tvDescription.setMovementMethod(LinkMovementMethod.getInstance()); } else { tvDescription.setText(des); } return root; } private OnClickListener memberNameOnClickListener = new OnClickListener() { @Override public void onClick(View v) { String url = (String)v.getTag(); if(url != null) { Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); } } }; private class DesURLSpan extends ClickableSpan { private String url; public DesURLSpan(String url) { this.url = url; } @Override public void onClick(View widget) { Spannable spannable = ((Spannable)((TextView)widget).getText()); Selection.removeSelection(spannable); // Selection.setSelection(spannable, 0);//FIXME 点击有黄色 connecter.jumpToMarket(url); } @Override public void updateDrawState(TextPaint ds) { ds.setColor(ds.linkColor); ds.setUnderlineText(false); } }; }