2016-11-23 10 views
0
import static android.text.TextUtils.join; 

import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.text.Spannable; 
import android.text.SpannableString; 
import android.text.style.ImageSpan; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

TextView testText; 
TextView testText2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    testText = (TextView) findViewById(R.id.text1); 
    testText2 = (TextView) findViewById(R.id.text2); 

    List<SpannableString> refinements = new ArrayList<>(); 
    refinements.add(getFilterWithIcon("100", R.drawable.ic_feature_bed_s)); 
    refinements.add(new SpannableString("Testing text")); 

    //Text without icon 
    testText.setText(join(" | ", refinements)); 
    //Text with icon 
    testText2.setText(getFilterWithIcon("100", R.drawable.ic_feature_bed_s)); 

} 

private SpannableString getFilterWithIcon(String stringValue, int icon) { 
    Drawable image = ContextCompat.getDrawable(getApplicationContext(), icon); 
    image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight()); 
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); 
    String spString = " " + stringValue; 
    SpannableString spFilterWithIcon = new SpannableString(spString); 
    spFilterWithIcon.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return spFilterWithIcon; 
}} 

ResultBild zeigt nicht in SpannableString mit Bild

Das Bild erscheint nicht, wenn mit einem anderen SpannableString verbunden. Es funktioniert nur als einzelner spannableString. Allerdings muss ich mehrere SpannableStrings mit & ohne Bilder verbinden.

Danke für Ihre Eingabe.

+0

Wo ist Join-Methode? – chandil03

+0

@ chandil03 es ist von android TextUtils. – HasaniK

+0

versuchen Sie es mit der Methode concat – chandil03

Antwort

2

erstellen SpannableStringBuilder mehrere imagespan und Text

SpannableStringBuilder builder = new SpannableStringBuilder(); 
builder.append(edittext.getText()); 
builder.append(getFilterWithIcon("100", R.drawable.ic_feature_bed_s)); 

und setzen schließlich

editText.setText(builder); 

Hinweis anhängen obwohl SpannableStringBuilder eine unveränderliche Klasse ist, kann es nicht mehr geändert werden.

+0

Das funktionierte für mich – HasaniK