2014-10-20 9 views
20

ich im Konstruktor meiner benutzerdefinierten Ansicht folgend bin Aufruf:Einstellung in benutzerdefinierten textsize Ansicht Ergebnisse in großem Text

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(); 
    } 
} 

es angenommen hat, Text und Textgröße für 2 Textfelder zu setzen.

Ich habe die folgenden in meiner attr.xml zusätzlich zu den String-Formaten für den Textinhalt (was gut funktioniert).

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

Wenn ich diese Ansicht verwenden, und die Textgröße eine Dimension über xml gesetzt, mit

 <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" 
      /> 

der Text endet als sein wesentlich größer erwartet. Ich setze nur 10 bzw. 12sp, und die Textgrößen sind näher an 30sp.

Kann jemand sehen, was ich falsch mache? Muss ich etwas mit DisplayMetrics machen, um sicherzustellen, dass die Dinge richtig skaliert werden?

Edit: Hinzufügen einiger Klärungs

Die Dimension up wird immer gepflückt. Der Text ändert sich, wenn ich die verschiedenen Textgrößen mit meinem benutzerdefinierten Attribut (in XML) einstelle. Ich habe auch versucht, getDimensionPixelSize zu verwenden.

Es ist, als ob die Berechnung/Dimension Abruf falsch ist. 1sp (oder dp) Änderung führt zu einer signifikanten Änderung.

Antwort

32

Versuchen Sie Folgendes statt:

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

Um eine Klärung dieser richtige Lösung hinzufügen, musste ich zuerst die Dimension in Pixel abrufen und dann die Textgröße von der Einheit/Art der Dimension vorbei war ich in der 2. Arg gehen. Ja, – loeschg

Verwandte Themen