public class BorderedTextView extends TextView {
private Paint paint = new Paint();
public static final int BORDER_TOP = 0x00000001;
public static final int BORDER_RIGHT = 0x00000002;
public static final int BORDER_BOTTOM = 0x00000004;
public static final int BORDER_LEFT = 0x00000008;
private Border[] borders;
public BorderedTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public BorderedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public BorderedTextView(Context context) {
super(context);
init();
}
private void init(){
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(4);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(borders == null) return;
for(Border border : borders){
paint.setColor(border.getColor());
paint.setStrokeWidth(border.getWidth());
if(border.getStyle() == BORDER_TOP){
canvas.drawLine(0, 0, getWidth(), 0, paint);
} else
if(border.getStyle() == BORDER_RIGHT){
canvas.drawLine(getWidth(), 0, getWidth(), getHeight(), paint);
} else
if(border.getStyle() == BORDER_BOTTOM){
canvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint);
} else
if(border.getStyle() == BORDER_LEFT){
canvas.drawLine(0, 0, 0, getHeight(), paint);
}
}
}
public Border[] getBorders() {
return borders;
}
public void setBorders(Border[] borders) {
this.borders = borders;
}
}
边境班:
public class Border {
private int orientation;
private int width;
private int color = Color.BLACK;
private int style;
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public int getStyle() {
return style;
}
public void setStyle(int style) {
this.style = style;
}
public int getOrientation() {
return orientation;
}
public void setOrientation(int orientation) {
this.orientation = orientation;
}
public Border(int Style) {
this.style = Style;
}
}
希望这有助于某人:)
10
让我总结一些不同的(非程序化)方法 .
使用可绘制的形状
将以下内容保存为drawable文件夹中的XML文件(例如,my_border.xml):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- View background color -->
<solid
android:color="@color/background_color" >
</solid>
<!-- View border color and width -->
<stroke
android:width="1dp"
android:color="@color/border_color" >
</stroke>
<!-- The radius makes the corners rounded -->
<corners
android:radius="2dp" >
</corners>
</shape>
16 回答
简单的方法是为TextView添加一个视图 . 底部边框线的示例:
对于其他方向边框,请调整分隔符视图的位置 .
创建一个边框视图,背景颜色为边框颜色和文本视图的大小 . 将边框视图填充设置为边框的宽度 . 将文本视图背景颜色设置为文本视图所需的颜色 . 现在在边框视图中添加文本视图 .
改变康斯坦丁·布洛夫的答案,因为在我的情况下不起作用:
compileSdkVersion 26(Android 8.0),minSdkVersion 21(Android 5.0),targetSdkVersion 26,实现'com.android.support:appcompat-v7:26.1.0',gradle:4.1
我找到的最简单的解决方案(实际上有效):
您可以在代码中添加以下内容:
您可以将形状可绘制(矩形)设置为视图的背景 .
和矩形drawable back.xml(放入res / drawable文件夹):
您可以使用
@android:color/transparent
作为纯色来获得透明背景 . 您还可以使用填充来将文本与边框分开 . 有关更多信息,请参阅:http://developer.android.com/guide/topics/resources/drawable-resource.html我只是在看一个类似的答案 - 它可以通过一个笔画和以下覆盖来完成:
我通过扩展textview并手动绘制边框解决了这个问题 . 我甚至添加了这样你可以选择边框是虚线还是虚线 .
边境班:
希望这有助于某人:)
让我总结一些不同的(非程序化)方法 .
使用可绘制的形状
将以下内容保存为drawable文件夹中的XML文件(例如,my_border.xml):
然后将其设置为TextView的背景:
更多帮助:
Shape Drawable (Android docs)
Android Developer Tips & Tricks: XML Drawables (Part I)
使用9补丁
9补丁是可伸缩的背景图像 . 如果使用边框制作图像,则会为TextView提供边框 . 您需要做的就是制作图像,然后将其设置为TextView中的背景 .
以下是一些链接,将显示如何制作9补丁图像:
Draw 9-patch
Simple Nine-patch Generator
A simple guide to 9-patch for Android UI
Creating & Using 9-patch images in Android
如果我只想要顶部边框怎么办?
Using a layer-list
您可以使用图层列表将两个矩形堆叠在一起 . 通过使第二个矩形比第一个矩形略小,您可以制作边框效果 . 第一个(下部)矩形是边框颜色,第二个矩形是背景颜色 .
设置
android:top="2dp"
将顶部(使其变小)偏移2dp . 这允许第一个(下部)矩形显示,给出边框效果 . 您可以像上面的shape
drawable一样将它应用于TextView背景 .以下是有关图层列表的更多链接:
Understanding Android's <layer-list>
How to make bottom border in drawable shape XML selector?
Create borders on a android view in drawable xml, on 3 sides?
Using a 9-patch
您可以使用单个边框制作9个补丁图像 . 其他一切与上面讨论的相同 .
Using a View
这是一种技巧,但如果你需要在两个视图之间添加一个分隔符或者在一个TextView中添加一个边框,它就可以了 .
这里有一些更多的链接:
How to draw a line in Android
How to put a horizontal divisor line between edit text's in a activity
How to add a horizontal 1px line above image view in a relative layout?
我找到了一种更好的方法来围绕TextView设置边框 .
使用九个补丁图像作为背景 . 它非常简单,SDK附带了一个制作9补丁图像的工具,它完全涉及 no 编码 .
链接是http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch .
我有办法很简单,我想分享它 .
当我想对mi TextViews进行平方时,我只是将它们放在LinearLayout中 . 我设置了LinearLayout的背景颜色,并在TextView中添加了填充 . 结果就像你对TextView进行平方 .
实际上,它非常简单 . 如果你想在Textview后面有一个简单的黑色矩形,只需在TextView标签中添加
android:background="@android:color/black"
即可 . 像这样:检查下面的链接以制作圆角http://androidcookbook.com/Recipe.seam?recipeId=2318
Android项目中res下的drawable文件夹不限于位图(PNG或JPG文件),但它也可以包含XML文件中定义的形状 .
然后可以在项目中重用这些形状 . 形状可用于在布局周围放置边框 . 此示例显示带有弯角的矩形边框 . 在drawable文件夹中创建一个名为customborder.xml的新文件(在Eclipse中使用File菜单并选择New then File,在文件名中选择drawable文件夹,然后单击Finish) .
输入定义边框形状的XML:
属性
android:shape
设置为矩形(形状文件也支持椭圆,直线和圆环) . Rectangle是默认值,因此如果它是一个定义的矩形,则可以省略该属性 . 请参阅有关形状的Android文档http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape有关形状文件的详细信息 .元素角将矩形角设置为圆角 . 可以在每个角上设置不同的半径(请参阅Android参考) .
填充属性用于移动应用了形状的视图的内容,以防止内容与边框重叠 .
此处的边框颜色设置为浅灰色(CCCCCC十六进制RGB值) .
形状也支持渐变,但这里没有使用 . 再次,请参阅Android资源以查看如何定义渐变 . 使用
android:background="@drawable/customborder"
将形状应用于laypout .在布局中,可以正常添加其他视图 . 在此示例中,添加了单个TextView,文本为白色(FFFFFF十六进制RGB) . 背景设置为蓝色,加上一些透明度以降低亮度(A00000FF十六进制alpha RGB值) . 最后,通过将布局放置到具有少量填充的另一布局中,布局偏离屏幕边缘 . 因此,完整的布局文件:
这是我的'简单'助手类,它返回带边框的ImageView . 只需将它放在utils文件夹中,然后调用它:
这是代码 .
这可能对你有所帮助 .
您可以通过两种方法设置边框 . 一个是可绘制的,第二个是程序化的 .
使用Drawable
编程