2015-06-24 2 views
3

Я:Пусть изменить пользовательский размер шрифта в моей dimens.xml

<dimen name="text_small">16sp</dimen> 
<dimen name="text_normal">18sp</dimen> 
<dimen name="text_medium">20sp</dimen> 
<dimen name="text_big">22sp</dimen> 

теперь я хотел бы, чтобы позволить пользователю выбрать размер шрифта в виде фрагмента настройки. Скажем, например:

  1. Малый -2sp
  2. Нормальный + 0SP
  3. Medium + 2SP
  4. Большой + 4SP

Так, например, если пользователь выбирает "Big" Я бы такой размер шрифта будет:

<dimen name="text_small">20sp</dimen> 
<dimen name="text_normal">22sp</dimen> 
<dimen name="text_medium">24sp</dimen> 
<dimen name="text_big">26sp</dimen> 

Есть ли способ сделать некоторые вещи, как:

Application Start:

if (sizeUser.equals("Big")) { 
    text_small=24sp 
..... 
} 

и так далее?

+0

Dimens используются для отображения текста пропорционально на разных экранах – jlopez

ответ

0

Вам не нужно использовать dimens.xml. Вместо этого используйте setTextSize

TextView tv = findViewById(R.id.textView); 

if ("Big".equals(sizeUser) { 
    tv.setTextSize(26); 
} 
+0

я хотел бы использовать другой подход, потому что мой размер текста используется много Differente контроля, Я просто хочу сказать приложению, чтобы использовать другое измерение файла при запуске или что-то в этом роде. – helloimyourmind

0

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

public class MyTextView extends TextView { 

    public MyTextView(Context context) { 
     super(context); 
    } 

    public MyTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void setTextSize (int unit, float size){ 
     switch(USER_SET_SIZE){ 
      case SMALL: 
       setTextSize(TypedValue.COMPLEX_UNIT_SP, -2); 
       break; 
      case MEDIUM: 
       setTextSize(TypedValue.COMPLEX_UNIT_SP, 2); 
       break; 
      case LARGE: 
       setTextSize(TypedValue.COMPLEX_UNIT_SP, 4); 
       break; 
      case NORMAL: 
      default: 
       setTextSize(TypedValue.COMPLEX_UNIT_SP, 0); 
       break; 
     } 
    } 
} 

Или, если вы используете несколько представлений, и контролировать размер текста каждого я бы рекомендовал использовать темы, то изменить вашу тему на основе вашего размера шрифта. Просто позвоните setTheme() в свою деятельность onCreate().

Ваших файлы темы должны выглядеть этот файл

<style name="NormalSizeTheme" parent="@style/MyTheme"> 
    <item name="android:textSize">0sp</item> 
</style> 
+0

Я хотел бы использовать другой подход, потому что мой размер текста используется большим количеством элементов управления, я просто хочу сказать приложению, чтобы использовать другое измерение файла при запуске или что-то в этом роде. – helloimyourmind

+0

@helloimyourmind Посмотреть мое редактирование – ChrisStillwell

+0

С вашим редактированием я не могу использовать 4 разных размера шрифта, вы устанавливаете android: textSize, в то время как мне нужно установить 4 атрибута, которые я использую в android: textSize. – helloimyourmind