7

benim soru bu çok benzer olduğunu düşünüyorum çünkü okudum ve çok dikkatli bir şekilde kabul cevabı test Ancak kabul yanıt benim için çalışmıyor, this question ile aynı başlık kullanın. Ne görmek istiyorum olduğunuAndroid EditText: Nasıl BulletSpan tarafından boş bir mermi paragraf oluşturmak için?

EditText myEdit = (EditText) this.findViewById(R.id.myedit); 
myEdit.setText("a\nb\n"); 
Spannable s = myEdit.getText(); 
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
s.setSpan(new BulletSpan(30), 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
s.setSpan(new BulletSpan(30), 4, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
myEdit.setText(s); 

: gibi

Kodum arar:

  • bir
  • b
  • [I görmek istiyorum bana soru tarif edeyim Burada 3. mermi var, ama ortaya çıkmıyor]

Spannable.SPAN_INCLUSIVE_INCLUSIVE, Spannable.SPAN_INCLUSIVE_EXCLUSIVE, Spannable.SPAN_EXCLUSIVE_INCLUSIVE, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE'u denedim, ancak bu bayrakların hiçbiri benim için çalışmıyor.

Ve bu kodları kullanırsanız:

Sonra
EditText myEdit = (EditText) this.findViewById(R.id.myedit); 
myEdit.setText("a\nb\nc"); 
Spannable s = myEdit.getText(); 
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); 
s.setSpan(new BulletSpan(30), 2, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); 
s.setSpan(new BulletSpan(30), 4, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); 
myEdit.setText(s); 

beklediğim sonuç almak:

  • bir
  • b
  • c

üzerinde çalışıyorum kullanıcı, mermi simgesini tıkladığında zengin bir metin düzenleyicisidir. Fakat hiçbir karakter varsa yayılma en ed boş mermi göstermek için, ama yeni bir boş BulletSpan yapmak istiyorum şimdi ben, sorunun ne olabileceği konusunda emin değilim (hayır karakter ondan sonra sadece bir nokta ile, ama) başlangıç ​​ve bitiş, nokta görünmüyor.

+0

Şu anda Android'de zengin metin editörü hakkında bir proje olması. –

cevap

9

Bu çirkin bir çözümdür, ama daha iyi bulamadı - uca (sıfır genişlikli boşluk gibi bir şey) boş bir karakter eklemeyi deneyin. enter image description here

İdeal içten bu karakteri ekler özel bir EditText sınıf yapmak istiyorum, ama bunu kaldırır:

public void setBulletText(EditText myEdit, String text) { 
     String[] lines = TextUtils.split(text, "\n"); 
     SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(); 
     String line = null; 
     for (int index = 0; index < lines.length; ++index) { 
      line = lines[index]; 
      int length = spannableStringBuilder.length(); 
      spannableStringBuilder.append(line); 
      if (index != lines.length - 1) { 
       spannableStringBuilder.append("\n"); 
      } else if (TextUtils.isEmpty(line)) { 
       spannableStringBuilder.append("\u200B"); 
      } 
      spannableStringBuilder.setSpan(new BulletSpan(30), length, length + 1, 
       Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
     } 
     myEdit.setText(spannableStringBuilder); 
    } 

sonucudur: Bu (en azından görsel olarak) istediğiniz sonuçları üretiyor metin başka bir nesneye gönderildiğinde. Bu iyi ben buna basit bir çözüm var

+1

Hmmm ... evet, bunu kaldırmak için kendisi ') sonra' GetText (geçersiz kılma, 'super.getText()' döndürür (ve sıfır genişlikte boşluk bırakır) alt sınıf bir 'getRawText()' sahip hayal karakter.Bu temel düşünceyi düşündüm ve reddettim, ancak gerçek boşlukları eklemeyi düşündüğüm için sıfır genişlikli alanı düşünmemiştim. Sıfır genişlikli alan onu daha lezzetli hale getirir. Bu özel Unicode karakterini onurlandırmaksızın yazı tipleriyle ilgili herhangi bir sorun yaşadınız mı? Çok teşekkürler! – CommonsWare

+0

Henüz bir sorunla karşılaşmadım, fakat ben de pek fazla test yapmadım. Aslında bu çözümün büyük bir hayranı değilim - henüz daha iyi bir şey bulamadım. :/ –

+0

Bu cevapları test etme şansım olmadı, ve ödemesiz sürenin sona ermesinden önce olmaz. Her üçü de son mermi için sıraya bir şey koymayı içerir. Bu üçten (IMHO), görsel eserler sunma olasılığı en düşük olanıdır, bu yüzden ödülü almakta. Daha önce hiç denemediğim gibi, YMMV. – CommonsWare

1

, sadece yeni satır

EditText myEdit = (EditText) this.findViewById(R.id.myedit); 
myEdit.setText("a\nb\n "); //notice the space after newline 
Spannable s = myEdit.getText(); 
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
s.setSpan(new BulletSpan(30), 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
s.setSpan(new BulletSpan(30), 4, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
myEdit.setText(s); 
+0

Bu temelde Samuil'in cevabı ile aynıdır, çünkü onun daha az görsel etkisi vardır. Kullanıcının EditText'i nasıl tıkladığını düşündüğünüzde, alanınız gerçekten farkedilir (ör., Son kullanıcı mermisinin sonunda kullanıcı tıklamaları ve rüzgârlar ortaya çıkar ve sonuçta bir boşluk oluşur). Yine de teşekkürler! – CommonsWare

+0

Kodu denedim ve alan fark edilmez ve kullanıcı doğru yerde olsanız bile. – blganesh101

+0

Tamam, bazı testler yapacağım. Teşekkürler! – CommonsWare

2

sonunda bir boşluk ekleyin mı? https://github.com/chinalwb/are, ihtiyacınız varsa başvurabilirsiniz:

EditText myEdit = (EditText) this.findViewById(R.id.myedit); 
myEdit.setText("a\nb\n\n"); 
Spannable s = myEdit.getText(); 
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
s.setSpan(new BulletSpan(30), 2, 3, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
s.setSpan(new BulletSpan(30), 4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
myEdit.setText(s); 
myEdit.setSelection(s.length()-1); 

sonuç

enter image description here

+0

başlangıcında görünür. Eğer 'setSelection()' çağrısına dayanırsa, kullanıcı bir yere tıklarsa efekt kaybolabileceğinden, iyi değildir. – CommonsWare

+0

metnin programsal olarak ayarlandığından, setSelection() kullanılmadan, imleç 'a' dan hemen önce olacaktır. Fakat aksi halde, 3 merminin tümü yukarıdaki gibi görünür. – krishnakumarp

+0

setTextKeepState() yöntemini kullanabilirsiniz –