2014-10-20 3 views
20

Dzwonię następujące w konstruktorze mojego widoku niestandardowego:Ustawianie TEXTSIZE w widoku niestandardowym skutkuje ogromnym tekście

private void style(Resources.Theme theme, AttributeSet attrs) { 
    TypedArray a = theme.obtainStyledAttributes(
      attrs, 
      R.styleable.StackedTextView, 
      0, 0); 

    try { 
     DebugTool.assertTrue(holdr != null, "View holder has not been properly intialized."); 
     String line1 = a.getString(R.styleable.StackedTextView_line1); 
     setLine1(line1); 
     String line2 = a.getString(R.styleable.StackedTextView_line2); 
     setLine2(line2); 

     line1Size = a.getDimension(R.styleable.StackedTextView_line1_textSize, 20); 
     line2Size = a.getDimension(R.styleable.StackedTextView_line2_textSize, 20); 
     if (line1Size > 0) { 
      holdr.textLine1.setTextSize(line1Size); 
     } 
     if (line2Size > 0) { 
      holdr.textLine2.setTextSize(line2Size); 
     } 

    } finally { 
     a.recycle(); 
    } 
} 

to ma ustawić rozmiar tekstu i tekst do 2 pól tekstowych.

Mam również w moim pliku attr.xml oprócz formatów napisów dla treści tekstowej (co działa poprawnie).

<attr name="line1_textSize" format="dimension" /> 
    <attr name="line2_textSize" format="dimension" /> 

Kiedy używać tego widoku i ustawić rozmiar tekstu przy użyciu wymiaru poprzez XML,

 <com.me.app.view.component.StackedTextView 
      android:id="@+id/overview_total_reviews" 
      app:line1="40" 
      app:line2="Rating" 
      style="@style/OverviewStackedText" 
      app:line1_textSize="10sp" 
      app:line2_textSize="12sp" 
      /> 

tekst kończy się znacznie większy niż oczekiwano. Mam tylko ustawienie odpowiednio 10 i 12sp, a rozmiary tekstu są bliższe 30sp.

Czy ktoś może zobaczyć, co robię źle? Czy muszę coś zrobić z DisplayMetrics, aby upewnić się, że rzeczy są odpowiednio skalowane?

Edycja: Dodawanie trochę wyjaśnień

Wymiar jest coraz odebrał. Tekst zmienia się po ustawieniu różnych rozmiarów tekstu za pomocą mojego niestandardowego atrybutu (w języku xml). Próbowałem również użyć getDimensionPixelSize.

To tak, jakby odzyskiwanie obliczeń/wymiarów było nieprawidłowe. Zmiana 1sp (lub dp) powoduje znaczącą zmianę.

Odpowiedz

32

Wypróbuj następujące zamiast:

line1Size = a.getDimensionPixelSize(R.styleable.StackedTextView_line1_textSize, 0); 
line2Size = a.getDimensionPixelSize(R.styleable.StackedTextView_line2_textSize, 0); 

if (line1Size > 0) { 
    holdr.textLine1.setTextSize(TypedValue.COMPLEX_UNIT_PX, line1Size); 
} 
if (line2Size > 0) { 
    holdr.textLine2.setTextSize(TypedValue.COMPLEX_UNIT_PX, line2Size); 
} 
+0

dodać kilka wyjaśnień na to właściwe rozwiązanie, musiałem najpierw odzyskać wymiar w pikselach, a następnie ustawić rozmiar tekstu poprzez przepuszczenie urządzenia/rodzaj wymiaru byłem przejście w drugim arg. Yeesh. – loeschg