J'ai un Text View
qui a un contenu d'image. J'ai donné ellipsize = "end"
pour Text View
. Après ellipse, l'image apparaît après elle.L'image apparaît même après Ellipsize dans Android textView
13
A
Répondre
-3
Essayez ceci:
android:ellipsize="end"
android:singleLine="true"
4
Utilisez la classe EllipsizedTextView de iosched. Pour définir le texte dans la méthode d'utilisation de vue
setText(CharSequence text, BufferType type)
pour Spannable vous pouvez utiliser
textView.setText(text, TextView.BufferType.SPANNABLE);
également dans votre fichier XML que vous devez définir android:ellipsize
et android:maxLines
ou vous pouvez les définir par programme ainsi.
Mettre du code ici pour l'essayer. Code est modifié, pris de this question
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.style.ImageSpan;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity {
private EditText editText;
private Button button;
private EllipsizedTextView textView;
private static final String PATTERN = "\\[\\w+?\\]";
private Pattern pattern;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.edittext);
button = (Button) findViewById(R.id.btn);
textView = (EllipsizedTextView) findViewById(R.id.text);
//programmatic way of setting max lines and ellipsize
textView.setMaxLines(2);
textView.setEllipsize(TextUtils.TruncateAt.END);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
insertImageSpan();
}
});
pattern = Pattern.compile(PATTERN);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
textView.setText(s, TextView.BufferType.SPANNABLE);
}
});
}
private void insertImageSpan(){
insertTextInCurrentPosition(editText,"[face]");
int select = editText.getSelectionStart();
editText.setText(spanText(editText.getText()));
editText.setSelection(select);
}
public CharSequence spanText(CharSequence text) {
SpannableStringBuilder t = null;
if(text instanceof SpannableStringBuilder){
t = (SpannableStringBuilder) text;
}else{
t = new SpannableStringBuilder(text);
}
Matcher m = pattern.matcher(text);
while (m.find()) {
String mResult = m.group();
String key = mResult.substring(1, mResult.length() - 1);
ImageSpan[] spans = t.getSpans(m.start(),m.end(),ImageSpan.class);
if(spans== null || spans.length==0){
try{
ImageSpan span = new ImageSpan(this , R.drawable.ic_launcher);
t.setSpan(span , m.start() , m.end() , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}catch (Exception e){
continue;
}
}
}
return t;
}
public static void insertTextInCurrentPosition(EditText tv, CharSequence str) {
if (tv == null || TextUtils.isEmpty(str)) return;
tv.getText().replace(tv.getSelectionStart() , tv.getSelectionEnd() , str , 0 , str.length());
}
}
et EllipsizedTextView
import android.content.Context;
import android.content.res.TypedArray;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* A simple {@link TextView} subclass that uses {@link TextUtils#ellipsize(CharSequence,
* android.text.TextPaint, float, android.text.TextUtils.TruncateAt, boolean,
* android.text.TextUtils.EllipsizeCallback)} to truncate the displayed text. Th
*/
public class EllipsizedTextView extends TextView {
private static final int MAX_ELLIPSIZE_LINES = 100;
private int mMaxLines;
public EllipsizedTextView(Context context) {
this(context, null, 0);
}
public EllipsizedTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public EllipsizedTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// Attribute initialization
final TypedArray a = context.obtainStyledAttributes(attrs, new int[]{
android.R.attr.maxLines
}, defStyle, 0);
mMaxLines = a.getInteger(0, 1);
a.recycle();
}
@Override
public void setText(CharSequence text, BufferType type) {
CharSequence newText = getWidth() == 0 || mMaxLines > MAX_ELLIPSIZE_LINES ? text :
TextUtils.ellipsize(text, getPaint(), getWidth() * mMaxLines,
TextUtils.TruncateAt.END, false, null);
super.setText(newText, type);
}
@Override
protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {
super.onSizeChanged(width, height, oldWidth, oldHeight);
if (width > 0 && oldWidth != width) {
setText(getText());
}
}
@Override
public void setMaxLines(int maxlines) {
super.setMaxLines(maxlines);
mMaxLines = maxlines;
}
}
et activity_main
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/edittext" />
<com.anirudha.experiment.EllipsizedTextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:singleLine="false"/>
</RelativeLayout>
</ScrollView>
0
Vous devez passer outre SpannedEllipsizer, Vous pouvez trouver la résolution parfaite ici: https://github.com/lsjwzh/FastTextView/blob/master/widget.FastTextView/src/main/java/com/lsjwzh/widget/text/FastTextView.java
Questions connexes
- 1. Android Textview ellipsize avec plusieurs lignes
- 2. Comment configurer maxLines et ellipsize d'un TextView en même temps
- 3. Android TextView avec multiligne et « android: ellipsize = milieu »
- 4. 3 TextView avec ellipsize = "middle"
- 5. Android TextView avec l'attribut ellipsize déplacé de la position d'origine
- 6. TextView et Ellipsize quand pressé par d'autres TextView
- 7. android: ellipsize ne fonctionne pas comme prévu
- 8. Android: ActionBarSherlock Titre Ellipsize
- 9. Android Ellipsize left
- 10. Ellipsize lignes individuelles d'un SpannableString dans un TextView
- 11. TextView n'est pas tronqué dans TableLayout bien qu'utilisant l'attribut ellipsize
- 12. Comment montrer deux Textview avec ellipsize fin dans Linearlayout horizontale dans android?
- 13. Notifié après la première rotation du texte en mode texte (ellipsize = "marquee") dans Android
- 14. Set textview fading dans Android 4.0.3
- 15. Marquee dans divers TextView en même temps?
- 16. L'application Android s'arrête après setText sur TextView
- 17. fondu fond d'un textview android
- 18. Ellipsize chapiteau/fin
- 19. android: ellipsize = "end" ne fonctionne pas dans preferences.xml
- 20. Android ListView ellipsize contenu de colonne large
- 21. Android Image affiche apparaît après setVisibility disparu
- 22. Spinner/Ellipsize/Width
- 23. AdMob AdView apparaît sur ListView dans Android
- 24. textview emballage dans android
- 25. Android problèmes de mise en page AppWidget avec ellipsize
- 26. Ellipsize ne fonctionne pas correctement dans un TextView dans un TableLayout
- 27. Android en utilisant ellipsize sur le texte du widget
- 28. Android: Quelque chose de mieux que Android: ellipsize = "end" pour ajouter "..." aux longues chaînes tronquées?
- 29. Android TextView
- 30. La fenêtre de la console apparaît toujours même après ProcessWindowStyle.Hidden;
quelle est la question? – user3623735
@ user3623735 il a été demandé en 2012 –