2015-03-10 5 views
0

У меня есть квадрат LinearLayout, содержащий несколько других LinearLayouts с ImageViews и TextViews внутри. Я сохраняю содержимое макета как файл png после того, как пользователь его изменил. Все изображения и тексты упорядочиваются с использованием значений общей гравитации и layout_gravity. Вот небольшой пример:Android набор TextView размер текста, чтобы выглядеть одинаково на всех размерах экрана

enter image description here

Вот моя проблема: Я хочу SAMPLE TEXT выглядеть точно так же размер всех размеров экрана, будучи телефон 480p или таблетка 1200p. Первоначально я думал, что установить размер текста в SP будет достаточно, но это не так, потому что по мере увеличения разрешения экрана текст становится меньше.

Итак, мой вопрос в том, как я могу программно установить размер текста, чтобы он выглядел точно такого же размера, независимо от ширины экрана. Как вы видите, родительский макет всегда будет квадратом.

Я попытался программно установить SP или использовать масштабный коэффициент.

float scale = 0; 

if (screenWidth == 720) { 
     scale = 1; 
} else { 
     scale = (720 - screenWidth) * 100.2f/screenWidth; 
} 

float defaultSizeFor720 = 35f; 

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, defaultSizeFor720 * scale); 

Не работает. по мере увеличения экрана текст становится меньше, не так мал, как при использовании только SP, но все же. Я также пробовал большинство ответов из других вопросов, но все еще не работал. Любые идеи?

+0

Вы пытались использовать dp вместо sp? sp будет масштабироваться как для размера экрана, так и для пользовательских настроек. – fhsilva

+0

Если 'sp' не работает, вы можете сделать отдельную' dimance' для разных экранов – Xcihnegn

ответ

3

Единственный надежный способом я нашел:

  • имеет высоту текста для размера экрана по умолчанию
  • масштаба это высота текста в зависимости от размера текущего экрана
  • найти лучший матч в размере текста чтобы соответствовать Нужной высоте

    float DEFAULT_SCREEN_WIDTH = 720f; 
    
    float TEXT_HEIGHT = 50f; 
    float sizeLine1 = (screenWidth * TEXT_HEIGHT)/DEFAULT_SCREEN_WIDTH; 
    Rect bounds = new Rect(); 
    int textSize = 1; 
    while (bounds.height() < sizeLine1) { 
        textSize++; 
        txtLine1.getPaint().setTextSize(textSize); 
        txtLine1.getPaint().getTextBounds("test", 0, "test".length(), bounds); 
    } 
    

Migh t не быть элегантным или эффективным, но он приемлем и работает. Существуют небольшие различия между телефонами планшета 1200p и 480p, но в моем случае это нормально.

0

Удалить текст атрибут размера из TextView тега в файле XML и попробовать это в коде

float textSize = getResources().getDimension(R.dimen.textsize)/getResources().getDisplayMetrics().density; 
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize); 
textView.setText(" Your desired text "); 

Надеется, что это поможет вам.

+0

Это не работает должным образом. – Alin