7

मैं उसी शीर्षक का उपयोग this question के साथ करता हूं, क्योंकि मुझे लगता है कि मेरा प्रश्न उस के समान ही है, मैंने स्वीकार किए गए उत्तर को बहुत सावधानीपूर्वक पढ़ा और परीक्षण किया, हालांकि स्वीकृत उत्तर मेरे लिए काम नहीं करता है। मुझे मेरे सवाल का वर्णन करते हैं:एंड्रॉइड संपादन टेक्स्ट: बुलेटस्पैन द्वारा खाली बुलेट पैराग्राफ कैसे बनाएं?

मेरे कोड लगता है:

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); 

क्या मैं देखना चाहता हूँ है:

  • एक
  • [मैं देखना चाहता हूँ यहां तीसरी गोली, लेकिन यह दिखाई नहीं दे रहा है]

मैंने Spannable.SPAN_INCLUSIVE_INCLUSIVE, Spannable.SPAN_INCLUSIVE_EXCLUSIVE, Spannable.SPAN_EXCLUSIVE_INCLUSIVE, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE की कोशिश की, लेकिन इनमें से कोई भी झंडे मेरे लिए काम नहीं करता है।

और अगर मैं इन कोड का उपयोग:

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); 
फिर

मैं उम्मीद परिणाम प्राप्त:

  • एक

मैं पर काम कर रहा हूँ एक समृद्ध टेक्स्ट एडिटर, जब उपयोगकर्ता बुलेट आइकन पर क्लिक करता है, तो मैं एक खाली बुलेट दिखाने के लिए एड, लेकिन अब मुझे यकीन नहीं है कि समस्या क्या हो सकती है, क्योंकि मैं एक नया खाली बुलेटस्पैन बनाना चाहता हूं (केवल एक बिंदु के साथ, लेकिन उसके बाद कोई वर्ण नहीं), लेकिन यदि अवधि में कोई वर्ण नहीं है प्रारंभ और अंत, डॉट दिखाई नहीं देता है।

+0

मैं वर्तमान में Android पर रिच टेक्स्ट संपादक के बारे में एक परियोजना है। –

उत्तर

9

यह एक बदसूरत समाधान है, लेकिन मुझे कोई बेहतर नहीं मिला है - अंत में एक खाली चरित्र जोड़ने की कोशिश करें (शून्य-चौड़ाई वाली जगह की तरह कुछ)।

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); 
    } 

परिणाम है:: enter image description here

आदर्श रूप में मैं एक कस्टम EditText वर्ग जो इस चरित्र आंतरिक रूप से जोड़ देती है बनाना चाहते हैं, लेकिन उसे निकाल देता है यह परिणाम आप चाहते हैं (कम से कम नेत्रहीन) का निर्माण कर रहा है जब पाठ किसी अन्य वस्तु को भेजा जा रहा है।

+1

हमम ... हाँ, मैं कल्पना कर सकता हूं कि subclass पर 'getRawText() 'है जो' super.getText()' (और शून्य-चौड़ाई वाली जगह छोड़ देता है) देता है, फिर उसे हटाने के लिए 'getText()' को ओवरराइड कर रहा है चरित्र।मैंने इस मूल विचार को माना और अस्वीकार कर दिया था, लेकिन मैंने शून्य-चौड़ाई वाली जगह के बारे में सोचा नहीं था, क्योंकि मैं वास्तविक सफेद जगह जोड़ने की सोच रहा था। शून्य-चौड़ाई वाली जगह इसे और अधिक सुखद बनाता है। क्या आपने उस विशेष यूनिकोड चरित्र को सम्मानित नहीं करने वाले फोंट के साथ किसी भी समस्या में भाग लिया है? बहुत धन्यवाद! – CommonsWare

+0

अभी तक कोई समस्या नहीं देखी है, लेकिन मैंने वास्तव में बहुत अधिक परीक्षण नहीं किया है। असल में मैं इस समाधान का बड़ा प्रशंसक नहीं हूं - अभी तक कुछ भी बेहतर नहीं मिला है। :/ –

+0

मुझे इन उत्तरों का परीक्षण करने का मौका नहीं मिला है, और बक्षीस की अवधि समाप्त होने से पहले नहीं होगा। सभी तीनों में अंतिम बुलेट के लिए लाइन पर कुछ डालने शामिल है। तीनों में से, यह एक (आईएमएचओ) दृश्य कलाकृतियों को पेश करने की सबसे कम संभावना है, यही कारण है कि इसे बक्षीस मिल रहा है। ऐसा कहा जा रहा है, क्योंकि मैंने अभी तक उनमें से किसी को भी कोशिश नहीं की है, वाईएमएमवी। – CommonsWare

1

मैं इस के लिए एक सरल उपाय है, बस न्यू लाइन

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

यह मूल रूप से समूइल के उत्तर जैसा ही है, सिवाय इसके कि उसके पास कम दृश्य प्रभाव है। यह देखते हुए कि उपयोगकर्ता 'एडिटटेक्स्ट' पर क्लिक करता है, तो आपकी जगह वास्तव में ध्यान देने योग्य होगी (उदाहरण के लिए, उपयोगकर्ता उस अंतिम बुलेट के अंत में क्लिक करता है और हवाओं को ऊपर ले जाता है, जिसके परिणामस्वरूप एक प्रमुख स्थान होता है)। हालांकि धन्यवाद! – CommonsWare

+0

मैंने कोड की कोशिश की और स्थान ध्यान देने योग्य नहीं है और भले ही आप उपयोगकर्ता को सही जगह पर क्लिक करें। – blganesh101

+0

ठीक है, मैं कुछ परीक्षण चलाऊंगा। धन्यवाद! – CommonsWare

2

के अंत में एक जगह जोड़ यह अच्छा है? https://github.com/chinalwb/are, आप अगर आप की जरूरत का उल्लेख कर सकते हैं:

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); 

परिणाम

enter image description here

+0

की शुरुआत में दिखाई देता है यदि यह 'सेट चयन()' कॉल पर निर्भर करता है, तो यह अच्छा नहीं है, क्योंकि उपयोगकर्ता कहीं क्लिक करता है तो प्रभाव खो सकता है। – CommonsWare

+0

चूंकि हम प्रोग्राम को प्रोग्रामेटिक रूप से सेट कर रहे हैं, सेट चयन() के बिना कर्सर 'ए' से पहले होगा। लेकिन अन्यथा, सभी 3 गोलियां ऊपर के रूप में दिखाई देती हैं। – krishnakumarp

+0

आप setTextKeepState() विधि का उपयोग कर सकते हैं –

संबंधित मुद्दे