ExpandableTextView is a TextView which can expand/collapse just like the Google Play's app description. Feel free to use it all you want in your Android apps.
1.attrs.xml
Add attribute to attrs.xml in values folder.<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="ExpandableTextView"> <attr name="trimLength" format="integer"/> </declare-styleable> </resources>
2.ExpandableTextView.java
package com.myapplication; import android.content.Context; import android.content.res.TypedArray; import android.text.SpannableStringBuilder; import android.util.AttributeSet; import android.view.View; import android.widget.TextView; public class ExpandableTextView extends TextView { private static final int DEFAULT_TRIM_LENGTH = 50; private static final String ELLIPSIS = " ..."; private CharSequence originalText; private CharSequence trimmedText; private BufferType bufferType; private boolean trim = true; private int trimLength; public ExpandableTextView(Context context) { this(context, null); } public ExpandableTextView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ExpandableTextView); this.trimLength = typedArray.getInt(R.styleable.ExpandableTextView_trimLength, DEFAULT_TRIM_LENGTH); typedArray.recycle(); setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { trim = !trim; setText(); requestFocusFromTouch(); } }); } private void setText() { super.setText(getDisplayableText(), bufferType); } private CharSequence getDisplayableText() { return trim ? trimmedText : originalText; } @Override public void setText(CharSequence text, BufferType type) { originalText = text; trimmedText = getTrimmedText(text); bufferType = type; setText(); } private CharSequence getTrimmedText(CharSequence text) { if (originalText != null && originalText.length() > trimLength) { return new SpannableStringBuilder(originalText, 0, trimLength + 1).append(ELLIPSIS); } else { return originalText; } } public CharSequence getOriginalText() { return originalText; } public void setTrimLength(int trimLength) { this.trimLength = trimLength; trimmedText = getTrimmedText(originalText); setText(); } public int getTrimLength() { return trimLength; } }
3.activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal"> <com.myapplication.ExpandableTextView android:id="@+id/text" android:layout_width="200dp" android:layout_height="wrap_content" /> </LinearLayout>
4.MainActivity.java
public class MainActivity extends Activity { Spannable.Factory spannableFactory; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spannableFactory = Spannable.Factory .getInstance(); String text = "ExpandableTextView is a TextView which can expand/collapse " + "just like the Google Play's app description. Feel free to use it all you want in your Android apps."; final ExpandableTextView textView = (ExpandableTextView) findViewById(R.id.text); textView.setText(text); } }
1 comments so far
Where is R.styleable.ExpandableTextView?
EmoticonEmoticon