如何在Android的textview中添加边框?

是否可以在textview上绘制边框?

您可以将可绘制的形状(矩形)设置为视图的背景。

<TextView android:text="Some text" android:background="@drawable/back"/> 

和矩形可绘制back.xml(放入res / drawable文件夹):

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="@android:color/white" /> <stroke android:width="1dip" android:color="#4fa5d5"/> </shape> 

你可以使用@android:color/transparent来使纯色具有透明背景。 您也可以使用填充将文本与边框分开。 有关更多信息,请参阅: http : //developer.android.com/guide/topics/resources/drawable-resource.html

让我总结一下几种不同的(非程序化的)方法。

使用可绘制的形状

将以下内容保存为可绘制文件夹中的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> 

然后将其设置为TextView的背景:

 <TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/my_border" /> 

更多帮助:

  • Shape Drawable(Android文档)
  • Android开发人员提示和技巧:XML Drawables(第一部分)

使用9补丁

9贴片是一个可拉伸的背景图像。 如果您使用边框制作图像,则会为您的TextView添加边框。 所有你需要做的就是制作图像,然后将其设置为TextView中的背景。

 <TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/my_ninepatch_image" /> 

以下是一些链接,将显示如何制作一个9补丁的图像:

  • 画9个补丁
  • 简单的九修补程序生成器
  • 针对Android UI的9补丁简单指南
  • 在Android中创build和使用9贴片图像

如果我只想要最高边界怎么办?

使用图层列表

您可以使用图层列表将两个矩形堆叠在一起。 通过使第二个矩形比第一个矩形稍微小一点,可以制作边框效果。 第一个(较低的)矩形是边框颜色,第二个矩形是背景颜色。

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Lower rectangle (border color) --> <item> <shape android:shape="rectangle"> <solid android:color="@color/border_color" /> </shape> </item> <!-- Upper rectangle (background color) --> <item android:top="2dp"> <shape android:shape="rectangle"> <solid android:color="@color/background_color" /> </shape> </item> </layer-list> 

设置android:top="2dp"偏移顶部(使其更小)2dp。 这允许第一个(下方)矩形显示出来,给出边界效果。 您可以将此应用于TextView背景,就像上面绘制的shape一样。

以下是一些关于图层列表的更多链接:

  • 了解Android的<layer-list>
  • 如何使可绘制形状的底部边框XMLselect器?
  • 在可绘制的xml,在3边的android视图创build边框?

使用9补丁

你可以用一个单一的边框制作一个9格式的图像。 其他一切和上面讨论的一样。

使用视图

这是一种技巧,但是如果您需要在两个视图之间添加一个分隔符或者将一个边框添加到单个TextView,那么它就可以很好地工作。

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textview1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <!-- This adds a border between the TextViews --> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="@android:color/black" /> <TextView android:id="@+id/textview2" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 

这里有一些更多的链接:

  • 如何在Android中绘制一条线
  • 如何在编辑文本之间放置一个水平的因子线
  • 如何在相对布局中在图像视图上添加水平1px行?

简单的方法是为您的TextView添加一个视图。 底部边界线示例:

 <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:text="@string/title" android:id="@+id/title_label" android:gravity="center_vertical"/> <View android:layout_width="fill_parent" android:layout_height="0.2dp" android:id="@+id/separator" android:visibility="visible" android:background="@android:color/darker_gray"/> </LinearLayout> 

对于其他方向边界,请调整分隔视图的位置。

我已经通过扩展textview并手动绘制边框来解决此问题。 我甚至添加,所以你可以select是否边框点缀或虚线。

 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; } } 

希望这可以帮助别人:)

我只是在看一个类似的答案 – 它可以用笔画和下面的覆盖:

 @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { Paint strokePaint = new Paint(); strokePaint.setARGB(255, 0, 0, 0); strokePaint.setTextAlign(Paint.Align.CENTER); strokePaint.setTextSize(16); strokePaint.setTypeface(Typeface.DEFAULT_BOLD); strokePaint.setStyle(Paint.Style.STROKE); strokePaint.setStrokeWidth(2); Paint textPaint = new Paint(); textPaint.setARGB(255, 255, 255, 255); textPaint.setTextAlign(Paint.Align.CENTER); textPaint.setTextSize(16); textPaint.setTypeface(Typeface.DEFAULT_BOLD); canvas.drawText("Some Text", 100, 100, strokePaint); canvas.drawText("Some Text", 100, 100, textPaint); super.draw(canvas, mapView, shadow); } 

我发现了一个更好的方式来放置一个TextView的边框。

使用九个补丁的图像作为背景。 这非常简单,SDK带有一个工具来制作9-patch的图像,而且绝对涉及编码。

链接是http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

您可以通过两种方法设置边框。 一个是可绘制的,另一个是编程式的。

使用Drawable

 <shape> <solid android:color="@color/txt_white"/> <stroke android:width="1dip" android:color="@color/border_gray"/> <corners android:bottomLeftRadius="10dp" android:bottomRightRadius="0dp" android:topLeftRadius="10dp" android:topRightRadius="0dp"/> <padding android:bottom="0dip" android:left="0dip" android:right="0dip" android:top="0dip"/> </shape> 

编程


 public static GradientDrawable backgroundWithoutBorder(int color) { GradientDrawable gdDefault = new GradientDrawable(); gdDefault.setColor(color); gdDefault.setCornerRadii(new float[] { radius, radius, 0, 0, 0, 0, radius, radius }); return gdDefault; } 

检查下面的链接,使圆angularhttp://androidcookbook.com/Recipe.seam?recipeId=2318

在Android项目中,res下的drawable文件夹不限于位图(PNG或JPG文件),也可以保存在XML文件中定义的形状。

这些形状可以在项目中重复使用。 一个形状可以用来在布局周围放置一个边框。 这个例子显示了一个带有弯曲angular的矩形边框。 在drawable文件夹中创build一个名为customborder.xml的新文件(在Eclipse中使用File菜单并selectNew然后File,并在文件名中select可绘制的文件夹types并单击Finish)。

input定义边框形状的XML:

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="20dp"/> <padding android:left="10dp" android:right="10dp" android:top="10dp" android:bottom="10dp"/> <solid android:color="#CCCCCC"/> </shape> 

属性android:shape被设置为矩形(形状文件也支持椭圆,线和圆环)。 Rectangle是默认值,所以如果这个属性是一个被定义的矩形,那么这个属性可以省略。 有关形状文件的详细信息,请参阅http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape上有关形状的Android文档。;

元素拐angular设置矩形拐angular圆angular。 可以在每个angular落设置不同的半径(请参阅Android参考)。

填充属性用于移动应用了形状的视图的内容,以防止内容重叠边框。

此处的边框颜色设置为浅灰色(CCCCCChexRGB值)。

形状也支持渐变,但是这里没有被使用。 再次看到Android资源,看看如何定义一个渐变。 使用android:background="@drawable/customborder"将形状应用于android:background="@drawable/customborder"

在布局中,其他视图可以正常添加。 在这个例子中,添加了一个TextView,文本是白色的(FFFFFFhexRGB)。 背景设置为蓝色,加上一些透明度以降低亮度(A00000FFhexalpha RGB值)。 最后,通过将布局放置到具有less量填充的另一个布局中,使布局与屏幕边缘偏移。 完整的布局文件是这样的:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/customborder"> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Text View" android:textSize="20dp" android:textColor="#FFFFFF" android:gravity="center_horizontal" android:background="#A00000FF" /> </LinearLayout> </LinearLayout> 

你可以在代码中添加这样的内容:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#ffffff" /> <stroke android:width="1dip" android:color="#4fa5d5"/> </shape> 

我有办法做到这一点很简单,我想分享它。

当我想平方米TextViews,我只是把他们在一个LinearLayout。 我设置了我的LinearLayout的背景颜色,并添加了一个填充到我的TextView中。 结果就好像你把TextView平方一样。

这是我的'简单'辅助类,它返回一个ImageView的边框。 只要把它放在你的utils文件夹中,就像这样调用它:

 ImageView selectionBorder = BorderDrawer.generateBorderImageView(context, borderWidth, borderHeight, thickness, Color.Blue); 

这是代码。

 /** * Because creating a border is Rocket Science in Android. */ public class BorderDrawer { public static ImageView generateBorderImageView(Context context, int borderWidth, int borderHeight, int borderThickness, int color) { ImageView mask = new ImageView(context); // Create the square to serve as the mask Bitmap squareMask = Bitmap.createBitmap(borderWidth - (borderThickness*2), borderHeight - (borderThickness*2), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(squareMask); Paint paint = new Paint(); paint.setStyle(Paint.Style.FILL); paint.setColor(color); canvas.drawRect(0.0f, 0.0f, (float)borderWidth, (float)borderHeight, paint); // Create the darkness bitmap Bitmap solidColor = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888); canvas = new Canvas(solidColor); paint.setStyle(Paint.Style.FILL); paint.setColor(color); canvas.drawRect(0.0f, 0.0f, borderWidth, borderHeight, paint); // Create the masked version of the darknessView Bitmap borderBitmap = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888); canvas = new Canvas(borderBitmap); Paint clearPaint = new Paint(); clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); canvas.drawBitmap(solidColor, 0, 0, null); canvas.drawBitmap(squareMask, borderThickness, borderThickness, clearPaint); clearPaint.setXfermode(null); ImageView borderView = new ImageView(context); borderView.setImageBitmap(borderBitmap); return borderView; } } 

这可能会帮助你。

 <RelativeLayout android:id="@+id/textbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:background="@android:color/darker_gray" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_margin="3dp" android:background="@android:color/white" android:gravity="center" android:text="@string/app_name" android:textSize="20dp" /> </RelativeLayout 

其实这很简单 如果你想在Textview后面添加一个简单的黑色矩形,只需在TextView标签中添加android:background="@android:color/black"即可。 喜欢这个:

 <TextView android:textSize="15pt" android:textColor="#ffa7ff04" android:layout_alignBottom="@+id/webView1" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:background="@android:color/black"/>