Android 可滚动的 TextView 边框

Android Scrollable TextView Border

我的应用程序中有一个 textView,我在其中显示文本和图形。

一旦内容对于 textView 的约束来说太大了,它就会滚动。

一切正常,但是,我想在其周围添加边框。我在这里查看了 SO 和互联网上的其他地方,我能找到的唯一解决方案是在背景周围添加边框,然后将背景应用于所述 TextView。这很好,但是当我们滚动时,内容显然 边框上显示,如下所示:

现在显然,我知道 为什么 会发生这种情况(因为边框只是背景的一部分),但是我不知道如何将边框置于内容.

我唯一的 XML 是背景形状,其他一切都是通过编程完成的,所以我正在寻找可以应用于我的情况的解决方案。

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 代码(Class 扩展 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);

你的 "border" 有 15dp,所以在 dimen.xml 中声明如下:

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

并将其用作自定义中的填充 TextView:

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

或者如果您的视图是在布局中定义的 xml 只需添加 "android:padding" 属性

编辑:

您还可以在 <shape> 中添加 <padding> 并定义顶部/左侧/右侧/底部填充:

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