Advertisement
Guest User

Untitled

a guest
Mar 5th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingLeft="@dimen/activity_horizontal_margin"
  6. android:paddingRight="@dimen/activity_horizontal_margin"
  7. android:paddingTop="@dimen/activity_vertical_margin"
  8. android:paddingBottom="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity"
  10. android:orientation="vertical">
  11.  
  12.  
  13. <EditText
  14. android:id="@+id/edittext"
  15. android:layout_width="match_parent"
  16. android:layout_height="wrap_content"/>
  17.  
  18. <Button
  19. android:id="@+id/btn"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:text="insert image"/>
  23.  
  24. <TextView
  25. android:id="@+id/text"
  26. android:layout_width="match_parent"
  27. android:layout_height="wrap_content"
  28. android:singleLine="true"
  29. android:ellipsize="end"/>
  30. </LinearLayout>
  31.  
  32. public class MainActivity extends Activity {
  33.  
  34. private EditText editText;
  35. private Button button;
  36. private TextView textView;
  37.  
  38. private static final String PATTERN = "\[\w+?\]";
  39. private Pattern pattern;
  40.  
  41. @Override
  42. protected void onCreate(Bundle savedInstanceState) {
  43. super.onCreate(savedInstanceState);
  44. setContentView(R.layout.activity_main);
  45. editText = (EditText) findViewById(R.id.edittext);
  46. button = (Button) findViewById(R.id.btn);
  47. textView = (TextView) findViewById(R.id.text);
  48.  
  49. button.setOnClickListener(new View.OnClickListener() {
  50. @Override
  51. public void onClick(View v) {
  52. insertImageSpan();
  53. }
  54. });
  55.  
  56. pattern = Pattern.compile(PATTERN);
  57.  
  58. editText.setSpannableFactory(new Span());
  59.  
  60. editText.addTextChangedListener(new TextWatcher() {
  61. @Override
  62. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  63.  
  64. }
  65.  
  66. @Override
  67. public void onTextChanged(CharSequence s, int start, int before, int count) {
  68.  
  69. }
  70.  
  71. @Override
  72. public void afterTextChanged(Editable s) {
  73. textView.setText(s);
  74. }
  75. });
  76. }
  77.  
  78. private void insertImageSpan(){
  79. insertTextInCurrentPosition(editText,"[face]");
  80. int select = editText.getSelectionStart();
  81. editText.setText(spanText(editText.getText()));
  82. editText.setSelection(select);
  83. }
  84.  
  85. public CharSequence spanText(CharSequence text) {
  86. SpannableStringBuilder t = null;
  87. if(text instanceof SpannableStringBuilder){
  88. t = (SpannableStringBuilder) text;
  89. }else{
  90. t = new SpannableStringBuilder(text);
  91. }
  92. Matcher m = pattern.matcher(text);
  93. while (m.find()) {
  94. String mResult = m.group();
  95. String key = mResult.substring(1, mResult.length() - 1);
  96.  
  97. ImageSpan[] spans = t.getSpans(m.start(),m.end(),ImageSpan.class);
  98. if(spans== null || spans.length==0 ){
  99. try{
  100. ImageSpan span = new ImageSpan(this , R.drawable.ic_launcher);
  101. t.setSpan(span , m.start() , m.end() , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  102. }catch (Exception e){
  103. continue;
  104. }
  105. }
  106.  
  107. }
  108. return t;
  109. }
  110.  
  111. public static void insertTextInCurrentPosition(EditText tv, CharSequence str) {
  112. if (tv == null || TextUtils.isEmpty(str)) return;
  113. tv.getText().replace(tv.getSelectionStart() , tv.getSelectionEnd() , str , 0 , str.length());
  114. }
  115.  
  116.  
  117. @Override
  118. public boolean onCreateOptionsMenu(Menu menu) {
  119. // Inflate the menu; this adds items to the action bar if it is present.
  120. getMenuInflater().inflate(R.menu.menu_main, menu);
  121. return true;
  122. }
  123.  
  124. @Override
  125. public boolean onOptionsItemSelected(MenuItem item) {
  126. // Handle action bar item clicks here. The action bar will
  127. // automatically handle clicks on the Home/Up button, so long
  128. // as you specify a parent activity in AndroidManifest.xml.
  129. int id = item.getItemId();
  130.  
  131. //noinspection SimplifiableIfStatement
  132. if (id == R.id.action_settings) {
  133. return true;
  134. }
  135.  
  136. return super.onOptionsItemSelected(item);
  137. }
  138.  
  139. private class Span extends Spannable.Factory{
  140. @Override
  141. public Spannable newSpannable(CharSequence source) {
  142. source = spanText(source);
  143. SpannableString spannableString = new SpannableString(source);
  144. return spannableString;
  145. }
  146. }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement