TextView - программная установка размера текста, похоже, не работает

146

Я использую Eclipse Indigo, тестирую на двух эмуляторах (2.2 и 3.0).

приведенный ниже код показывает то, что я сейчас тестирую, однако установка размера текста ничего не показывает на экране при попытке запустить эмулятор. (если я закомментирую размер текста, текст будет отображаться красным цветом). Я подумал, что почему-то eclipse не перестраивает код, но я добавил строку кода, чтобы добавить синий фон, и это сработало. Я попытался установить размер текста после установки текста, но безуспешно. код ниже. Спасибо за вашу помощь! (отказ от ответственности) - я стараюсь держаться подальше от 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);
  }
}
cspam
источник

Ответы:

19

Текст размером 2 будет практически незаметен. Попробуйте хотя бы с 14. Кстати, использование xml имеет много преимуществ и облегчит вашу жизнь, если вам понадобится сделать что-то более сложное, чем «Hello World».

Николай Еленков
источник
Я попробую это с 14. Как я сказал в первом посте - даже если 2 слишком мало, это не должно сделать мой экран пустым, не так ли? Думаю, я читал это как масштаб за пределами того, что уже был текст, вместо того, чтобы просто устанавливать размер. - посмотрю, но все равно спрошу - какой размер по умолчанию? в любом случае, спасибо.
cspam
Кстати, да, я понимаю, что XML может иметь свои преимущества, но у меня нет опыта работы с ним. Да, я знаю, что этому, наверное, легко научиться. Поскольку я уже знаком с java, я просто подумал, что было бы действительно полезно ознакомиться с как можно большим количеством классов. Кажется, что использование XML как бы скрывает от вас многое.
cspam
Это не скрывает - это те же классы с одинаковыми параметрами. Требуется некоторое время, чтобы научиться переводить между ними, но на самом деле это довольно эффективно. В качестве бонуса, если вы определяете представления в XML, система заботится о различных размерах экрана, плотности и ориентации без необходимости изменять код, а только о файлах макета.
Николай Еленков 09
сможете ли вы изменить макеты и ориентацию во время выполнения на основе любого количества факторов?
cspam
Это очень общие вопросы, но вкратце - да. Даже если вы определяете свой пользовательский интерфейс в XML, вы все равно можете добавлять / удалять представления во время выполнения. Вы также можете изменить поведение по умолчанию и самостоятельно изменить ориентацию.
Николай Еленков
552

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

Попробуй это :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

сослаться на это и это .

ОБНОВЛЕНИЕ: Теперь setTextSize(float size)размер текста будет устанавливаться автоматически в " scaled pixel" единицах. не нужно упоминать COMPLEX_UNIT_SP вручную. Обратитесь к документации .

Houcine
источник
39
Это правильный ответ. Более конкретно: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Брилл Паппин
2
Большое спасибо!
DmitryKanunnikoff 06
73

Это устранило проблему для меня. У меня одинаковый размер шрифта на всех устройствах.

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));
Викас
источник
Единый номер R.dimen.font или у вас разные размеры для разных устройств?
The_Martian
В моем случае я объявил шрифт в файлах dimen.xml в этих папках: values, values-sw600dp, values-sw720dp с конкретными значениями.
Викас
странно, что TextView исчез после вызова textView.setTextSize (R.dimen.text_size_max), но используйте свой метод, он работает.
li2 01
25

В настоящее время 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 TextView: github.com/aosp-mirror/platform_frameworks_base/blob/…
Альберт Вила Кальво,
12

Пожалуйста, перейдите по этой ссылке для получения дополнительной информации о настройке размера текста в коде. В основном это говорит:

public void setTextSize (int unit, размер с плавающей запятой)

Начиная с: API уровня 1 Установить размер текста по умолчанию для заданных единиц измерения и значения. См. TypedValue для получения информации о возможных единицах измерения. Связанные атрибуты XML

android: параметры textSize

unit Желаемая единица измерения.
size Желаемый размер в заданных единицах измерения.

Джек
источник
1
Я просто дважды проверил Eclipse в своем коде, и, согласно intellisense, у меня есть 2 варианта: setTextSize, setTextSize (размер с плавающей запятой), setTextSize (int unit, float size). Документация, которую вы связали, подтверждает это.
cspam
Правильно - вы пробовали? Также Николай говорит, что 2 будет ПУТЬ меньше, чтобы увидеть, попробуйте также увеличить.
Джек,
да, но проблема в том, что когда я пытаюсь сделать это так, как сейчас, текст даже не отображается. это просто пустой экран. Даже если 2 не было заметно, почему экран пустой?
cspam
Это не пусто. Если присмотреться, можно увидеть маленькие красные пиксели :). Постепенно увеличивайте размер, чтобы увидеть.
Николай Еленков 09
И, кстати, setTextSize (float) эквивалентен setTextSize (COMPLEX_UNIT_SP, float).
Николай Еленков 09
10

В моем случае использовал этот метод :

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

Здесь программно установите TextView TextSize :

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

Продолжайте наслаждаться :)

Дхрув Раваль
источник
Привет, @Dhruv Raval, я собираюсь настроить размер шрифта в моем проекте, если это значение 18 действительно для любой плотности экрана, или мне следует создать размер для каждого экрана?
Armando Marques
0

В Kotlin вы можете просто использовать вот так:

textview.textSize = 20f

Ахамед
источник