2012-04-12 5 views
2

Ich versuche, eine TextView mit dem Hintergrundbild zu skalieren. Ich habe eine Klasse, die die Textview-Klasse erweitert, und als solche wird hinzugefügt:Android setTextSize TextView verschiebt Grundlinie und schneidet Texthöhe ab

MyCustomTextView tv2 = new MyCustomTextView(this); 
    RelativeLayout.LayoutParams lparams = new   
       RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
              LayoutParams.WRAP_CONTENT); 
    lparams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
    tv2.setLayoutParams(lparams); 
    myLayout.addView(v); 

und ich bin Zoomen wie so in meiner benutzerdefinierten Textview-Klasse:

public float getScaledTextHeight() 
    { 
     float textHeightDPI = initial_size/windowHeight_inDPI; 
     float textOnScreenHeight = textHeightDPI * windowHeight_inDPI; 
     float scaledText = textOnScreenHeight * mZoom; 
     return scaledText; 
    } 
    public void setZoomTextHeight(float zoom) 
    { 
     mZoom = zoom; 
     image_size = getScaledTextHeight(); 

     float mX = ((offset_x + img_offset_x) * mZoom); 
     float mY = ((offset_y + img_offset_y) * mZoom); 
     RelativeLayout.LayoutParams position1 = 
       (android.widget.RelativeLayout.LayoutParams)this.getLayoutParams(); 

     position1.leftMargin = (int)mX; 
     position1.topMargin = (int)mY; 
     position1.bottomMargin = (int)(window_height - (position1.topMargin + 
            image_size + 16)); 
     this.setLayoutParams(position1); 

     setTextSize(TypedValue.COMPLEX_UNIT_PX , image_size); 

     invalidate(); 
    } 

Was am Ende passiert ist, dass machen Der größere Text passt die Größe des TextView korrekt an, aber wenn der Text verkleinert wird, bleibt die gleiche Grundlinie erhalten, wie wenn sie groß wäre. Es fängt an, meinen Text von unten nach oben zu schneiden.

Meine Frage ist, wie kann ich die Basislinie verschieben, damit die Unterseite nicht während der Größenänderung abgeschnitten wird.

Vielen Dank im Voraus.

Antwort

1

Es wurde durch Hinzufügen des Konstruktors behoben. Das Einstellen der vertikalen Bildlaufleiste funktionierte gut.

+0

Arbeitete gut für mich! Was zum Teufel geht hier vor, um das zu machen? – Glenn

+1

@Glenn der Grund, warum dies funktioniert, ist, weil Sie setMovementMethod versehentlich set android: bufferType = "spannable", die eine Verschiebung der Baseline erwartet. – whiskeyjoe

2

Mein (nicht) verschobenes Grundlinienproblem wurde gelöst, indem der Puffertyp auf spannbar gesetzt wurde. Dies kann auf zwei Arten geschehen. Entweder setzen den Puffertyp in xml:

android:bufferType="spannable" 

oder Rufaufbau Text mit dem entsprechenden Puffertyp in Code:

setText(getText(),BufferType.SPANNABLE); 

Durch Einstellen der BufferType spannable, das Textview automatisch die Basislinie entsprechend zurückgesetzt. Dies wird zu einem sehr geringen Leistungsaufwand kommen.

+0

Das hat auch für mich funktioniert! Vielen Dank. – Glenn

+0

Alle meine Respekt Mr. Whiskyjoe, ich habe seit Tagen mit diesem Problem gekämpft ... – Maragues

Verwandte Themen