2016-06-20 24 views
0

Ich habe eine TextView in meiner App innerhalb der ich Text und Grafiken anzeigen.Android Scrollbare TextView Border

Sobald der Inhalt für die Einschränkungen der textView zu groß wird, scrollt er.

Alles funktioniert perfekt, aber ich möchte einen Rahmen um ihn hinzufügen. Ich habe hier auf SO und anderswo im Internet geschaut und die einzigen Lösungen, die ich finden kann, sind das Hinzufügen eines Rahmens um den Hintergrund und das Anwenden des Hintergrunds auf das TextView. Das ist großartig, aber wenn wir bewegen, wird der Inhalt offensichtlich über die Grenze wie so angezeigt:

enter image description here

Jetzt offensichtlich, ich weiß warum dies geschieht, (weil die Grenze einfach ein Teil ist vom Hintergrund), aber ich weiß nicht, wie man die Grenze über den Inhalt bringt.

Das einzige XML, das ich habe, ist die Hintergrundform, alles andere wird programmatisch gemacht, also suche ich nach einer Lösung, die auf meine Situation angewendet werden kann.

XML

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
<shape android:shape="rectangle"> 
<solid android:color="#ffeeeeee"/> 
<stroke 
android:width="15dp" 
android:color="#000000" 
/> 
</shape> 
</item> 
</selector> 

Java-Code (Klasse erweitert Textview)

textLayout = new RelativeLayout(context);  
RelativeLayout.LayoutParams textParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); 
textParams.addRule(RelativeLayout.CENTER_HORIZONTAL); 

setTextColor(Color.BLACK); 
setGravity(Gravity.CENTER_HORIZONTAL); 
setTextSize(size); 
setMovementMethod(new ScrollingMovementMethod()); 

setBackgroundResource(R.drawable.textbg); 
textLayout.setPadding(xPadding, yPadding, xPadding, yPadding); 

Bitmap testPic= BitmapFactory.decodeResource(getResources(), R.drawable.pic1);  
Bitmap testPic2= BitmapFactory.decodeResource(getResources(), R.drawable.pic2);   

SpannableStringBuilder builder = new SpannableStringBuilder(); 
builder.append(Html.fromHtml(someText)).append(" "); 
builder.setSpan(new ImageSpan(context, testPic), 
builder.length() - 1, builder.length(), 0); 
builder.append(Html.fromHtml(someMoreText)).append(" "); 
builder.setSpan(new ImageSpan(context, testPic2), 
builder.length() - 1, builder.length(), 0); 
+0

legen Sie eine Auffüllung in Ihrem benutzerdefinierten 'TextView', sollte es helfen – pskink

+0

Danke @pskink, ich kann nicht glauben, dass ich das verpasst habe. Wenn du das als Antwort zurücklassen willst, werde ich es gerne annehmen. – Zippy

+0

sehe meine Antwort, aber ehrlich gesagt die neueste ** EDIT: ** enthält die einfachste Lösung – pskink

Antwort

1

Ihre "Grenze" hat 15dp, so erklären in dimen.xml etwas wie folgt aus:

<resources> 
    <dimen name="border_width">15dp</dimen> 
</resources> 

und verwenden Sie es als Polsterung in Ihrer benutzerdefinierten TextView:

int pad = getResources().getDimensionPixelSize(R.dimen.border_width); 
setPadding(pad, pad, pad, pad); 

oder wenn Ihre Ansicht in Layout XML definiert ist, fügen Sie einfach "android:padding" Attribut

EDIT:

Sie können auch hinzufügen <padding> in Ihrem <shape> und definieren Sie oben/links/rechts/unten Polsterung:

<shape android:shape="rectangle"> 
    ... 
    <padding .../> 
</shape>