TextView - metin boyutunu programlı olarak ayarlamak işe yaramıyor


140

Eclipse Indigo kullanıyorum, 2 emülatör (2.2 ve 3.0) üzerinde test yapıyorum.

Aşağıdaki kod şimdi ne test ediyorum gösterir, ancak metin boyutunu ayarlamak öykünücüyü çalıştırmaya çalışırken ekranda hiçbir şey ortaya koymaz. (metin boyutu yorum yaparsanız metin kırmızı bir renk ile gösterilir). Bir şekilde tutulmanın kodu yeniden oluşturmadığını düşündüm ama mavi arka planı eklemek için kod satırını ekledim ve işe yaradı. Hala başarı ile metni ayarladıktan sonra metin boyutunu ayarlamayı denedim. kod aşağıdadır. yardımınız için teşekkürler! (feragat) - xml uzak kalmaya çalışıyorum. Java'yı zaten bildiğim için buna bağlı olmak istemiyorum.

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}

Yanıtlar:


19

Metin boyutu 2 pratik olarak görünmez olacaktır. En az 14 ile deneyin. BTW, xml kullanmanın birçok avantajı vardır ve 'Merhaba Dünya'dan daha karmaşık bir şey yapmanız gerektiğinde hayatınızı kolaylaştıracaktır.


Ben 14 ile deneyeceğim. İlk yazıda söylediğim gibi - 2 çok küçük olsa bile, bu benim ekran boş yapmamalısınız? Sanırım sadece boyutu ayarlamak yerine metnin zaten ne olduğunu ötesinde bir ölçek olarak okuyordu. - Bakacağım ama yine de soracağım - varsayılan boyut nedir? neyse teşekkürler.
cspam

btw - evet ben xml avantajları olabilir farkında ama onunla sıfır deneyime sahip. Evet, muhtemelen öğrenmesi kolay olduğunu biliyorum. Java'ya zaten aşina olduğum için, mümkün olduğunca çok sınıfa aşina olmanın gerçekten yararlı olacağını düşündüm. XML kullanmanın birçoğunu sizden gizlediği anlaşılıyor.
cspam

Gizlemez - aynı parametrelerle aynı sınıflar. İkisi arasında çeviri yapabilmek biraz zaman alıyor, ama aslında oldukça verimli. Bir bonus olarak, XML'deki görünümleri tanımlarsanız, sistem kodunuzu değiştirmeye gerek kalmadan sadece düzen dosyalarını farklı ekran boyutlarına, yoğunluklarına ve yönelimlerine bakar.
Nikolay Elenkov

çalışma sırasında mizanpajları ve yönlendirmeleri istediğiniz sayıda faktöre göre değiştirebilir misiniz?
cspam

Bu çok geniş bir soru ama kısaca evet. Kullanıcı arayüzünüzü XML olarak tanımlasanız bile, çalışma zamanında görünümler ekleyebilir / kaldırabilirsiniz. Ayrıca varsayılan davranışı geçersiz kılabilir ve yön değişikliklerini kendiniz işleyebilirsiniz.
Nikolay Elenkov

535

yöntem TextView.setTextSize(int unit , float size); iki parametre alır.

Bunu dene :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

buna ve buna bakın .

GÜNCELLEME: Artık setTextSize(float size)metin boyutunu otomatik olarak " scaled pixel" birimlerinde ayarlayacak . COMPLEX_UNIT_SP'den manuel olarak bahsetmeye gerek yok. Dokümanlara bakınız .


36
Bu doğru cevap. Daha spesifik olarak: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin

2
Çok teşekkür ederim!
DmitryKanunnikoff

72

Bu benim için sorunu düzeltti. Tüm cihazlarda tek tip yazı tipi boyutu aldım.

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));

R.dimen.font üniforma numarası mı yoksa farklı cihazlar için farklı boyutlarınız mı var?
The_Martian

Benim durumumda bu klasörlerde dimen.xml dosyalarında yazı tipi bildirdim: değerler, değerler-sw600dp, değerler-sw720dp.
Vikas

textView.setTextSize (R.dimen.text_size_max) çağrıldıktan sonra TextView'in kaybolması tuhaftır, ancak yönteminizi kullandığında çalışır.
li2

Benim için çalışıyor. Teşekkür ederim!
apurv thakkar

24

Şu anda, setTextSize(float size)yöntem iyi çalışır , bu nedenle metin boyutunu değiştirmek için başka bir yöntem kullanmamız gerekmez

android.widget.TextView.java kaynak kodu

/**
 * Set the default text size to the given value, interpreted as "scaled
 * pixel" units.  This size is adjusted based on the current density and
 * user font size preference.
 *
 * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

Kullanım örneği

textView.setTextSize(20); // set your text size = 20sp


12

Koddaki metin boyutunu ayarlama hakkında daha fazla bilgi için lütfen bu bağlantıya bakın . Temelde şöyle diyor:

public void setTextSize (int birim, kayan boyut)

Başlangıç: API Seviye 1 Varsayılan metin boyutunu belirli bir birime ve değere ayarlayın. Olası boyut birimleri için bkz. TypedValue . İlgili XML Özellikleri

android: textSize Parametreleri

birim İstenen boyut birimi.
boyut Verilen birimlerde istenen boyut.


1
Sadece benim kod Eclipse kontrol ve intellisense göre ben aslında setTextSize, setTextSize (float boyutu), setTextSize (int birim, float boyutu) için 2 seçenek var. Bağladığınız belgeler bunu onaylar.
cspam

Doğru - denedin mi? Ayrıca Nikolay, 2'nin görmek için küçük bir yol olacağını, artmaya çalıştığını söylüyor.
Jack

evet ama sorun, ben şimdi sahip olduğu gibi yapmaya çalıştığınızda, metin bile görünmüyor. sadece boş bir ekran. 2 fark edilmese bile, ekran neden boş?
cspam

Boş değil. Gerçekten yakından bakarsanız, küçük kırmızı pikselleri görebilirsiniz :). Görmek için boyutu yavaş yavaş artırın.
Nikolay Elenkov

Ve bu arada, setTextSize (float), setTextSize (COMPLEX_UNIT_SP, float) öğesine eşdeğerdir.
Nikolay Elenkov

10

Benim durumumda bu yöntemi kullandı :

public static float pxFromDp(float dp, Context mContext) {
    return dp * mContext.getResources().getDisplayMetrics().density;
}

Set Buraya TextView'un en TEXTSIZE programlama :

textView.setTextSize(pxFromDp(18, YourActivity.this));

Zevk almaya devam :)


Merhaba @ Ravru Raval, ben bu değer 18 herhangi bir ekran yoğunluğu için geçerli olması durumunda, projemdeki yazı tipi boyutunu ayarlamak mümkün alıyorum, ya da her ekran için bir boyut oluşturmak gerekir?
Armando Marques Sobrinho
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.