TextView - налаштування розміру тексту програмно, схоже, не працює


140

Я використовую Eclipse Indigo, тестую 2 емулятори (2.2 та 3.0).

наведений нижче код показує те, що я зараз тестую, проте встановлення розміру тексту нічого не показує на екрані при спробі запустити емулятор (якщо я коментую розмір тексту, текст відображається червоним кольором). Я думав, що якимось затемненням не було відновлення коду, але я додав рядок коду, щоб додати синій фон, і це спрацювало. Я намагався встановити розмір тексту після встановлення тексту, все ще не маючи успіху. код нижче. спасибі за вашу допомогу! (відмова) - я намагаюся триматися подалі від xml. Будучи тим, що я вже знаю Java, я не хочу від цього залежати.

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

Відповіді:


19

Текст розміром 2 буде практично непомітний. Спробуйте з принаймні 14. BTW, використання xml має безліч переваг і полегшить ваше життя, коли вам потрібно зробити щось складніше, ніж "Hello World".


Я спробую це з 14. Як я вже говорив у першому дописі - навіть якщо 2 занадто мало, це не повинно робити екран порожнім, чи не так? Я здогадуюсь, що я читав це як масштаб, що перевищує те, що вже був текст, а не просто встановлюючи розмір. - Я буду дивитись, але все одно запитаю - який розмір за замовчуванням? все одно дякую.
cspam

btw - так, я розумію, що XML може мати свої переваги, але у мене з цим нульовий досвід. Так, я знаю, що це, ймовірно, легко вивчити. Оскільки я вже знайомий з Java, я просто подумав, що було б корисно ознайомитися з якомога більшою кількістю класів. Здається, що використання XML-сорту приховує від вас багато цього.
cspam

Це не приховує - це ті самі класи з однаковими параметрами. Знадобиться певний час, щоб можна було перекласти між ними, але це насправді досить ефективно. Як бонус, якщо ви визначаєте перегляди в XML, система піклується про різні розміри екрану, щільність та орієнтацію, без необхідності змінювати ваш код, лише файли компонування.
Микола Єленков

чи зможете ви змінити схеми та орієнтації під час виконання на основі будь-якої кількості факторів?
cspam

Це дуже широкі запитання, але, коротше кажучи, так. Навіть якщо ви визначаєте свій інтерфейс користувача у XML, ви все одно можете додавати / видаляти представлення даних під час виконання. Ви також можете самостійно змінити поведінку за замовчуванням і керувати змінами орієнтації.
Микола Єленков

535

метод TextView.setTextSize(int unit , float size);приймає два параметри.

Спробуйте це :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

посилайтеся на це та на це .

UPDATE: Тепер setTextSize(float size)встановимо розмір тексту автоматично в « scaled pixel» одиниць. немає потреби згадувати COMPLEX_UNIT_SP вручну. Зверніться до документації .


36
Це правильна відповідь. Більш конкретно: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Брілл Паппін

2
Велике спасибі!
ДмитроКануннікофф

72

Це вирішило для мене проблему. Я отримав однаковий розмір шрифту на всіх пристроях.

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

Чи однаковий номер R.dimen.font або у вас різні розміри для різних пристроїв?
The_Martian

У моєму випадку я оголосив шрифт у файлах dimen.xml у цих папках: значень, значень-sw600dp, значень-sw720dp із конкретними значеннями.
Вікас

дивно, що TextView зник після виклику textView.setTextSize (R.dimen.text_size_max), але використовувати ваш метод, він працює.
li2

Працює для мене. Дякую!
apurv thakkar

24

В даний час setTextSize(float size)метод буде добре працювати, тому нам не потрібно використовувати інший метод для зміни розміру тексту

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

Приклад використання

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

Посилання на джерело AOSP
Альберт Віла Кальво

12

Перейдіть за цим посиланням для отримання додаткової інформації щодо встановлення розміру тексту в коді. В основному це говорить:

public void setTextSize (int одиниця, розмір float)

Оскільки: API Level 1 Встановіть розмір тексту за замовчуванням на задану одиницю та значення. Див. TypedValue щодо можливих одиниць розміру. Пов'язані атрибути XML

android: textSize Parameters

одиниця Бажана одиниця розміру.
розмір Бажаний розмір у заданих одиницях.


1
Я просто двічі перевірив Eclipse у своєму коді, і відповідно до intellisense у мене фактично є два варіанти setTextSize, setTextSize (float size), setTextSize (int unit, float size). Документація, яку ви зв'язали, це підтверджує.
cspam

Правильно - ти спробував? Також Микола каже, що 2 будуть ДУЖЕМИ до малих, спробуйте також збільшити.
Джек

так, але проблема полягає в тому, що коли я намагаюся зробити це так, як у мене зараз, текст навіть не з’являється. це просто порожній екран. Навіть якщо 2 не було помітно, чому екран порожній?
cspam

Це не пусто. Якщо ви дивитесь по-справжньому близько, ви можете побачити маленькі червоні пікселі :). Поступово збільшуйте розмір, щоб побачити.
Микола Єленков

І до речі, setTextSize (float) еквівалентний setTextSize (COMPLEX_UNIT_SP, float).
Микола Єленков

10

У моєму випадку використовували цей метод :

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

Тут встановіть TextSiew TextSize Програматично :

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

Продовжуйте насолоджуватися :)


Привіт @Dhruv Raval, я підбираю можливість регулювати розмір шрифту в моєму проекті, якщо це значення 18 дійсне для будь-якої щільності екрана, або я повинен створити розмір для кожного екрана?
Армандо Маркіс Собриньо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.