2015-04-29 2 views
2

Я новичок в android, и я работаю над этой страницей «О», которая дает мне действительно странное поведение. В нем есть текст, который при нажатии открывается и затем сбрасывается при повторном нажатии. Свернутый текст имеет больший размер, чем расширенный текст. Когда я нажимаю, чтобы развернуть, текст waaay больше, чем даже расширенный расширенный текст, и даже когда я снова рушаюсь, свернутый текст также сохраняет огромный размер текста. (Это изменяет фактическое содержание текста просто отлично)Текст текста с расширенным увеличением текста

XML-TextView

<TextView 
      ... 
      android:textSize="@dimen/About_filler" 
      android:id="@+id/Stuff" 
      android:text="@string/about_filler" 
      android:clickable="true" 
      android:onClick="collapseToggle" 
      ... 
/> 

Метод щелчок вызывает

public void collapseToggle(View view){ 
    TextView text = (TextView) view; 
    if(! text.getText().equals(getString(R.string.about_filler))){ //if not collapsed 
     text.setText(getString(R.string.about_filler)); 
     text.setTextSize(getResources().getDimension(R.dimen.About_filler)); 
    } 

    else if(text.getId() == R.id.Stuff){ 
     text.setText(getString(R.string.about_contents_Stuff));  
     text.setTextSize(getResources().getDimension(R.dimen.About_contents)); 
    } 

И в Dimen папку

... 
<dimen name="About_contents">20sp</dimen> 
<dimen name="About_filler">40sp</dimen> 

Я знаю, что есть миллион лучших способов реализации такого рода вещей, но почему это происходит, просто убить g me.

+0

почему вы не используете TextAppearance.Small или TextAppearance.Medium или TextAppearance.Large. Что бы я сделал, это сделать два текстовых вида для фильтра и один для контента, а в контентном фильтре я объявляю размер как этот андроид: textSize = "15sp", если я не хочу использовать размеры текста, указанные выше –

ответ

1

По умолчанию text.setTextSize(float size) предполагает, вы передаете размер в SP единиц, таким образом, это преобразуя SP в PX внутри.

С другой стороны, getResources().getDimension() возвращает устройство в PX, внутренне выполняет преобразование с любого установленного вами значения.

Так что происходит в вашем случае

  • вы установили 20sp в dimens.xml
  • getDimension() возвращается сказать 100px (в зависимости от экрана)
  • setTextSize() предполагает, что вы настроили 100sp и изменяет его на что-то действительно HUUGE.

Чтобы исправить просто использовать другой вариант для setTextSize(), который принимает единицы: text.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.About_contents));