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.