Bir metin görünümünde harf aralığını nasıl değiştirebilirim? İçinde HTML metnim varsa yardımcı olur mu (Kodumda web görünümünü kullanamıyorum).
Not: Metin görünümünde HTML metinli kendi yazı tipimi kullanıyorum.
Bir metin görünümünde harf aralığını nasıl değiştirebilirim? İçinde HTML metnim varsa yardımcı olur mu (Kodumda web görünümünü kullanamıyorum).
Not: Metin görünümünde HTML metinli kendi yazı tipimi kullanıyorum.
Yanıtlar:
android'e göz atın: textScaleX
Ne kadar boşluğa ihtiyacınız olduğuna bağlı olarak, bu yardımcı olabilir. TextView'daki harf aralığı ile uzaktan ilgili tek şey budur.
Düzenleme: bakın JerabekJakub yanıtı @ güncellenmiş, daha iyi yöntem için aşağıda (Lolipop) API 21 ile başlayan bunu
letterSpacing
vs textScaleX
ne büyük bir fark
API 21'den beri bir seçenek seti harf aralığı vardır. SetLetterSpacing yöntemini çağırabilir veya letterSpacing niteliğiyle XML'de ayarlayabilirsiniz .
"1.2dp" in attribute "letterSpacing" cannot be converted to float."
letterSpacing
AS önizlemesinde değişmiyordu. Değişikliği görmek için uygulamayı fiziksel bir cihazda çalıştırmam gerekiyordu.
Daha çok alan:
android:letterSpacing="0.1"
Daha az alan:
android:letterSpacing="-0.07"
letterSpacing
0.0 göredir developer.android.com/reference/android/widget/...
Bu cevap Pedro'nun cevabına dayanmaktadır ancak ayarlanmıştır, böylece metin özelliği zaten ayarlanmışsa da işe yarar:
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;
}
}
Programlı olarak kullanmak istiyorsanız:
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
check-in gerekiyor applyLetterSpacing
, ama bunun dışında hayat kurtarıcı!
API> = 21'den sonra TextView tarafından çağrılan dahili yöntem var setLetterSpacing
daha fazlası için bunu kontrol et
TextView
Bu sorunu genişleten ve çözen özel bir sınıf oluşturdum ... Cevabıma buradan göz atın =)
Metin görünümünüze HTML metni gömmek için Html.fromHTML()
sözdizimini kullanabilirsiniz . Http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29 adresinden daha fazla bilgi alacaksınız.
android:letterSpacing=".05"
gibi bir programda