TextView - mengatur ukuran teks secara terprogram tampaknya tidak berfungsi

140

Saya menggunakan Eclipse Indigo, menguji 2 emulator (2.2 dan 3.0).

kode di bawah ini menunjukkan apa yang saya uji sekarang, namun pengaturan ukuran teks tidak mengungkapkan apa-apa di layar ketika mencoba menjalankan emulator. (jika saya mengomentari ukuran teks teks muncul dengan warna merah). Saya pikir entah bagaimana gerhana tidak membangun kembali kode tetapi saya menambahkan baris kode untuk menambahkan latar belakang biru dan itu berhasil. Saya telah mencoba mengatur ukuran teks setelah mengatur teks dengan masih belum berhasil. kode di bawah ini. terima kasih atas bantuan Anda! (penafian) - saya mencoba untuk menjauh dari xml. Menjadi yang saya sudah tahu java saya tidak ingin bergantung pada itu.

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

Jawaban:

19

Ukuran teks 2 praktis tidak akan terlihat. Cobalah dengan setidaknya 14. BTW, menggunakan xml memiliki banyak keuntungan dan akan membuat hidup Anda lebih mudah setelah Anda perlu melakukan sesuatu yang lebih kompleks daripada 'Hello World'.

Nikolay Elenkov
sumber
Saya akan mencobanya dengan 14. Seperti yang saya katakan di posting pertama - bahkan jika 2 terlalu kecil, itu seharusnya tidak membuat layar saya kosong kan? Saya kira saya membacanya sebagai skala di luar teks yang sudah ada, bukan hanya mengatur ukuran. - saya akan melihat tetapi saya tetap akan bertanya - berapa ukuran standar? Pokoknya terima kasih.
cspam
btw - ya saya sadar xml dapat memiliki kelebihannya tetapi saya tidak memiliki pengalaman dengannya. Ya saya tahu itu mungkin mudah dipelajari. Karena saya sudah terbiasa dengan java, saya hanya berpikir itu akan sangat berguna untuk menjadi terbiasa dengan sebanyak mungkin kelas. Tampaknya menggunakan semacam XML menyembunyikan banyak hal dari Anda.
cspam
Itu tidak menyembunyikannya - ini kelas yang sama dengan parameter yang sama. Butuh waktu untuk dapat menerjemahkan antara keduanya, tetapi sebenarnya cukup efisien. Sebagai bonus, jika Anda mendefinisikan tampilan dalam XML, sistem menangani berbagai ukuran layar, kepadatan, dan orientasi, tanpa perlu mengubah kode Anda, hanya file tata letak.
Nikolay Elenkov
apakah Anda dapat mengubah tata letak dan orientasi pada saat run time berdasarkan sejumlah faktor?
cspam
Itu pertanyaan yang sangat luas, tetapi, singkatnya, ya. Bahkan jika Anda mendefinisikan UI Anda dalam XML, Anda masih dapat menambah / menghapus tampilan pada saat dijalankan. Anda juga dapat mengesampingkan perilaku default dan menangani sendiri perubahan orientasi.
Nikolay Elenkov
534

metode ini TextView.setTextSize(int unit , float size);mengambil dua parameter.

Coba ini :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

lihat ini dan ini .

UPDATE: Sekarang "" setTextSize(float size)akan mengatur ukuran teks secara otomatis dalam scaled pixelunit " ". tidak perlu menyebutkan COMPLEX_UNIT_SP secara manual. Lihat dokumentasi .

Houcine
sumber
36
Ini jawaban yang benar. Lebih khusus: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin
2
Terima kasih banyak!
DmitryKanunnikoff
72

Ini memperbaiki masalah bagi saya. Saya mendapatkan ukuran font yang seragam di semua perangkat.

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));
Vara
sumber
Apakah nomor seragam R.dimen.font atau Anda memiliki ukuran yang berbeda untuk perangkat yang berbeda?
The_Martian
Dalam kasus saya, saya menyatakan font dalam file dimen.xml dalam folder ini: values, values-sw600dp, values-sw720dp dengan nilai-nilai spesifik.
Vikas
aneh bahwa TextView menghilang setelah textView.setTextSize (R.dimen.text_size_max) dipanggil, tetapi gunakan metode Anda, itu berfungsi.
li2
Bekerja untukku. Terima kasih!
apurv thakkar
24

Saat ini, setTextSize(float size)metode akan berfungsi dengan baik sehingga kita tidak perlu menggunakan metode lain untuk mengubah ukuran teks

kode sumber android.widget.TextView.java

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

Contoh menggunakan

textView.setTextSize(20); // set your text size = 20sp
Phan Van Linh
sumber
Tautan ke sumber AOSP TextView: github.com/aosp-mirror/platform_frameworks_base/blob/…
Albert Vila Calvo
12

Silakan lihat tautan ini untuk informasi lebih lanjut tentang pengaturan ukuran teks dalam kode. Pada dasarnya dikatakan:

public void setTextSize (unit int, ukuran float)

Sejak: API Level 1 Atur ukuran teks default ke unit dan nilai yang diberikan. Lihat TypedValue untuk unit dimensi yang memungkinkan. Atribut XML Terkait

android: parameter TextSize

unit Unit dimensi yang diinginkan.
size Ukuran yang diinginkan di unit yang diberikan.

Mendongkrak
sumber
1
Saya baru saja mengecek Eclipse dalam kode saya dan menurut intellisense saya sebenarnya punya 2 opsi untuk setTextSize, setTextSize (ukuran float), setTextSize (unit int, ukuran float). Dokumentasi yang Anda tautkan mengonfirmasi hal ini.
cspam
Benar - apakah Anda mencobanya? Juga Nikolay mengatakan 2 akan WAY to small to see, cobalah meningkat juga.
Jack
ya tetapi masalahnya adalah, ketika saya mencoba untuk melakukannya dengan cara yang saya miliki sekarang, teks bahkan tidak muncul. itu hanya layar kosong. Bahkan jika 2 tidak terlihat mengapa layar kosong?
cspam
Itu tidak kosong. Jika Anda melihat sangat dekat, Anda dapat melihat piksel merah kecil :). Tingkatkan ukuran secara bertahap untuk melihat.
Nikolay Elenkov
Dan omong-omong, setTextSize (float) setara dengan setTextSize (COMPLEX_UNIT_SP, float).
Nikolay Elenkov
10

Dalam Kasus Saya Digunakan Metode ini :

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

Di Sini Atur TextView's TextSize Secara Programatis :

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

Terus Menikmati :)

Dhruv Raval
sumber
Hai @ Dhruv Raval, saya mengambil untuk dapat menyesuaikan ukuran font di proyek saya, jika nilai ini 18 berlaku untuk kepadatan layar, atau haruskah saya membuat dimensi untuk setiap layar?
Armando Marques Sobrinho