मैं एक टेक्स्टव्यू में पत्र रिक्ति कैसे बदल सकता हूं? यदि इसमें HTML पाठ है तो मैं इसकी मदद करूंगा (मैं अपने कोड में वेबव्यू का उपयोग नहीं कर सकता)।
PS मैं अपने स्वयं के टाइपफेस को HTML टेक्स्ट के साथ टेक्स्टव्यू में उपयोग कर रहा हूं।
मैं एक टेक्स्टव्यू में पत्र रिक्ति कैसे बदल सकता हूं? यदि इसमें HTML पाठ है तो मैं इसकी मदद करूंगा (मैं अपने कोड में वेबव्यू का उपयोग नहीं कर सकता)।
PS मैं अपने स्वयं के टाइपफेस को HTML टेक्स्ट के साथ टेक्स्टव्यू में उपयोग कर रहा हूं।
जवाबों:
बाहर की जाँच एंड्रॉयड: textScaleX
इस बात पर निर्भर करता है कि आपको कितनी जगह चाहिए, इससे मदद मिल सकती है। टेक्स्टव्यू में अक्षर-रिक्ति से संबंधित केवल यही एक चीज़ है।
संपादित करें: कृपया एक अद्यतन, बेहतर विधि के लिए नीचे दिए गए @ जराबेकजैकब की प्रतिक्रिया को २१ से शुरू करने के लिए देखें (लॉलीपॉप)
letterSpacing
बनाम textScaleX
क्या बहुत बड़ा अंतर है
एपीआई 21 के बाद से एक विकल्प सेट पत्र रिक्ति है। आप विधि कॉल कर सकते हैं setLetterSpacing या XML में सेट विशेषता के साथ letterSpacing ।
"1.2dp" in attribute "letterSpacing" cannot be converted to float."
letterSpacing
से एएस पूर्वावलोकन में नहीं बदल रहा था। मुझे वास्तव में परिवर्तन को देखने के लिए एक भौतिक डिवाइस पर ऐप चलाना था।
ज्यादा जगह:
android:letterSpacing="0.1"
कम जगह:
android:letterSpacing="-0.07"
letterSpacing
0.0 के अनुसार है developer.android.com/reference/android/widget/...
यह उत्तर पेड्रो के उत्तर पर आधारित है, लेकिन समायोजित है तो यह भी काम करता है यदि पाठ विशेषता पहले से ही सेट है:
package nl.raakict.android.spc.widget;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ScaleXSpan;
import android.util.AttributeSet;
import android.widget.TextView;
public class LetterSpacingTextView extends TextView {
private float letterSpacing = LetterSpacing.BIGGEST;
private CharSequence originalText = "";
public LetterSpacingTextView(Context context) {
super(context);
}
public LetterSpacingTextView(Context context, AttributeSet attrs){
super(context, attrs);
originalText = super.getText();
applyLetterSpacing();
this.invalidate();
}
public LetterSpacingTextView(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
}
public float getLetterSpacing() {
return letterSpacing;
}
public void setLetterSpacing(float letterSpacing) {
this.letterSpacing = letterSpacing;
applyLetterSpacing();
}
@Override
public void setText(CharSequence text, BufferType type) {
originalText = text;
applyLetterSpacing();
}
@Override
public CharSequence getText() {
return originalText;
}
private void applyLetterSpacing() {
if (this == null || this.originalText == null) return;
StringBuilder builder = new StringBuilder();
for(int i = 0; i < originalText.length(); i++) {
String c = ""+ originalText.charAt(i);
builder.append(c.toLowerCase());
if(i+1 < originalText.length()) {
builder.append("\u00A0");
}
}
SpannableString finalText = new SpannableString(builder.toString());
if(builder.toString().length() > 1) {
for(int i = 1; i < builder.toString().length(); i+=2) {
finalText.setSpan(new ScaleXSpan((letterSpacing+1)/10), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
super.setText(finalText, BufferType.SPANNABLE);
}
public class LetterSpacing {
public final static float NORMAL = 0;
public final static float NORMALBIG = (float)0.025;
public final static float BIG = (float)0.05;
public final static float BIGGEST = (float)0.2;
}
}
यदि आप इसे प्रोग्रामेटिक रूप से उपयोग करना चाहते हैं:
LetterSpacingTextView textView = new LetterSpacingTextView(context);
textView.setSpacing(10); //Or any float. To reset to normal, use 0 or LetterSpacingTextView.Spacing.NORMAL
textView.setText("My text");
//Add the textView in a layout, for instance:
((LinearLayout) findViewById(R.id.myLinearLayout)).addView(textView);
null
चेक की जरूरत है applyLetterSpacing
, लेकिन इसके अलावा, जीवन बचाने वाला!
API के बाद = = 21 में TextView द्वारा प्रदान की गई इनबिल्ट विधि है setLetterSpacing
अधिक के लिए यह जाँच करें
मैंने एक कस्टम क्लास बनाया है जो TextView
इस समस्या को बढ़ाता है और हल करता है ... मेरे जवाब को यहाँ देखें =)
अपने टेक्स्टव्यू में HTML टेक्स्ट को एम्बेड करने के लिए आप Html.fromHTML()
सिंटैक्स का उपयोग कर सकते हैं । अधिक जानकारी आपको http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29 से प्राप्त होगी
android:letterSpacing=".05"
जैसे प्रोग्राम में जहां .05 मोटे तौर पर "50" होगा