Android Scrollable TextView Border

时间:2016-06-20 19:53:34

标签: java android textview border

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

一旦内容对于textView的约束变得太大,它就会滚动。

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

enter image description here

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

我唯一拥有的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代码(类扩展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);

1 个答案:

答案 0 :(得分:1)

你的&#34;边境&#34;有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"属性

即可

修改

您还可以在<padding>内添加<shape>并定义上/左/右/下填充:

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