TextView mit ImageSpan Emoji´s einfügen?

  • 4 Antworten
  • Letztes Antwortdatum
N

newperson

Neues Mitglied
1
Hallo ich bin noch ein Anfänger!

Ich möchte gerne wissen wie man beim TextView Emoji`s einfügt. Zum Beispiel wenn ich schreibe: Hallo :) Wie gehts? Soll sich das Smiley Zeichen in ein Bild ändern. Das Beispiel sieht man auf dem "Bild"!!!
Derzeit habe ich mit TextWatcher gearbeitet.
Zurzeit: wenn ich etwas schreibe wird der Text auf dem TextView angezeigt und mit dem Button "Send" verschicke ich diese Nachricht. Damit der Text gleichzeigt auf dem TextView angezeigt wird habe ich das mit TextWatcher realisiert.

Meine Frage jetzt: Wie kann ich die Zeichen [ :) , ;) , :b usw. ] ändern, dass dann ein Emoji (Bild) angezeigt wird?

Danke für die Hilfe :)

Das ist der Code: Aber ich weiß nicht wie ich mit dem Emoji´s weiter vorgehen soll??

Code:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    public Button bsend;
    public TextView tvShare;
    public EditText etWrite;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bsend = (Button) findViewById(R.id.bsend);
        tvShare = (TextView) findViewById(R.id.tvShare);
        tvShare.setVisibility(View.GONE);
        etWrite = (EditText) findViewById(R.id.etWrite);
        bsend.setOnClickListener(this);

        etWrite.addTextChangedListener(messageWatcher);
    }

    private final TextWatcher messageWatcher = new TextWatcher() {
        public void beforeTextChanged(CharSequence s, int START, int count, int after) {

        }

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            tvShare.setVisibility(View.VISIBLE);

        }

        public void afterTextChanged(Editable s) {
            if (s.length() == 0) {
                tvShare.setVisibility(View.GONE);
            } else{
                tvShare.setText("You have entered : " + etWrite.getText());
            }
        }
    };

    @Override
    public void onClick(View v) {

        switch (v.getId()){
            case R.id.bsend:
                String name = tvShare.getText().toString();
                Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_TEXT, name);
                sendIntent.setType("text/plain");
                startActivity(sendIntent);
                break;
        }

    }

    private static final HashMap<String, Integer> emoticons = new HashMap();
    static {
        emoticons.put(":)", R.drawable.tool);
        emoticons.put(";)", R.drawable.alarm);
    }
}
 

Anhänge

  • Bild.png
    Bild.png
    23,8 KB · Aufrufe: 185
Zuletzt bearbeitet:
Ich hab es selber geschafft :))
 
Hallo newperson,

dann wäre es nett, deine Lösung auch hier zu nennen. Falls du es nicht machst, sieht es so aus, als ob du dein Wissen für dich behalten willst und nichts der Community zurück gibst.
 
Hallo Kardroid,

Sorry, natürlich nenne ich die Lösung und ich hätte doch noch eine paar Fragen wäre nett wenn mich wer weiter HELFEN kann :)

Also zur Lösung: Ich habe es mit Spannable gelöst. Muss dazu sagen, dass ich im Internet recherchiert habe und mit viel ausprobieren habe ich es dann endlich geschafft :))

Code:
public static Spannable getSmiledText(Context context, String text) {
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        int index;
        for (index = 0; index < builder.length(); index++) {
            for (Map.Entry<String, Integer> entry : emoticons.entrySet()) {
                int length = entry.getKey().length();
                if (index + length > builder.length())
                    continue;
                if (builder.subSequence(index, index + length).toString().equals(entry.getKey())) {
                    builder.setSpan(new ImageSpan(context, entry.getValue()), index, index + length,
                            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    index += length - 1;
                    break;
                }
            }
        }
        return builder;
    }

Jetzt muss man nur mehr beim TextWatcher unter afterTextChanged diesen Code einfügen:
Code:
tvShare.setText(getSmiledText(getApplicationContext(), etWrite.getText().toString()));
Das Heißt, dass man beim TextView den geschrieben Text vom EditText setzten möchte bzw. anzeigen lassen möchte.


Meine Frage jetzt, bei sendIntent kann ich diese Nachricht jetzt nicht verschicken, weil ein Text und Bilder(Emojis) in einem sind. Wie kann ich das jetzt aber trotzdem lösen, dass ich dann diese Nachricht mit sendIntent oder dergleichen zum Beispiel über Whatsapp verschicke?
Und wie kann ich die Größe der Bilder(Emojis) ändern, dass sie gleich groß sind wie bei den anderen Keyboards wie zum Beispiel bei Whatsapp?

Im Anhang sieht man das Problem mit den Emojis
 

Anhänge

  • bild.png
    bild.png
    26 KB · Aufrufe: 141
newperson schrieb:
Meine Frage jetzt, bei sendIntent kann ich diese Nachricht jetzt nicht verschicken, weil ein Text und Bilder(Emojis) in einem sind. Wie kann ich das jetzt aber trotzdem lösen, dass ich dann diese Nachricht mit sendIntent oder dergleichen zum Beispiel über Whatsapp verschicke?
Einen Text mit einem Intent kannst du so versenden:
Code:
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "text  blabla");
sendIntent.setType("text/plain");
startActivity(sendIntent);
Jedoch glaube ich nicht, das man so WhatsApp Nachrichten versenden kann :)
Für die Darstellung der Emojis ist dann die Anwendung zuständig, an die du den Text sendest.

newperson schrieb:
Und wie kann ich die Größe der Bilder(Emojis) ändern, dass sie gleich groß sind wie bei den anderen Keyboards wie zum Beispiel bei Whatsapp?

Zuerst musst du den Emoji laden und anschließend verkleinern:
Code:
InputStream inputStream = getContentResolver().openInputStream(yourUri);
Drawable emoji = Drawable.createFromStream(inputStream, entry.getValue().toString() );

Bitmap emojiBitmap = ((BitmapDrawable) emoji).getBitmap();
Drawable scaledEmoji =newBitmapDrawable(getResources(),Bitmap.createScaledBitmap(bitmap,50,50,true));

builder.setSpan(new ImageSpan(context, scaledEmoji), index, index + length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 
Zurück
Oben Unten