如何给控件画边界?

时间:2022-07-26 17:03:41
我想设计一个带边框的TextView,因此自定义了一个类FrameTextView,继承TextView,然后重新编写了onDraw函数,但是奇怪的是,我画出来的边界只有左边和上边的线,右边和下边的线都看不到,请高手们指点一下,多谢多谢!

public class FrameTextView extends TextView {

private Paint mPaint = null;
private Rect r = null;

public FrameTextView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
r = new Rect();
}

public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
this.getLocalVisibleRect(r);
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(1);
canvas.drawRect(r, mPaint);
}

9 个解决方案

#1


画一个假的边框好了,不过如果你每个TextView都这样画的话看起来就很啰嗦了,还是你自己继承TextView的方法比较好.
给一个假边框的demo供你参考.

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#FFFF0000">
    
        <TextView android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="3dip"
        android:background="#FFFFFFFF"
        android:paddingTop="5dp"
        android:paddingLeft="5dp" 
        android:text="哈哈哈哈哈哈">
        </TextView>
    </LinearLayout>

#2


用个背景图片

#3


我没有那么做过!
我一般是用一个有边框的图片来做TextView的背景图片!

#4


背景圖吧,google本身的應用也是這麼做的,沒必要自己畫吧

#5


楼主的代码其实是可以画出来的,拿来试了一下,加下面两句就可以了,但是具体原因是什么还没找到.
=.=

public void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.getLocalVisibleRect(r);
r.bottom --;
r.right--;
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(1);
canvas.drawRect(r, mPaint);
}

#6


引用 1 楼 kenshintang1215 的回复:
画一个假的边框好了,不过如果你每个TextView都这样画的话看起来就很啰嗦了,还是你自己继承TextView的方法比较好.
给一个假边框的demo供你参考.
XML code

    <LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    and……


谢谢!这也是一个解决的办法,不过我还是觉得奇怪为何有一半的边界画不出来

#7


引用 5 楼 kenshintang1215 的回复:
楼主的代码其实是可以画出来的,拿来试了一下,加下面两句就可以了,但是具体原因是什么还没找到.
=.=
Java code

    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        this.getLocalVisibleRect(r);
        r.bottom --;
      ……


嗯,这个方法我也尝试过,是可以画出边界,不过如果这样做的话,当两个控件并排的时候,就会显得中间分隔的边界很粗了。

#8


背景图效果是最好的。

#9


该回复于2011-03-21 08:58:36被版主删除

#1


画一个假的边框好了,不过如果你每个TextView都这样画的话看起来就很啰嗦了,还是你自己继承TextView的方法比较好.
给一个假边框的demo供你参考.

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#FFFF0000">
    
        <TextView android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="3dip"
        android:background="#FFFFFFFF"
        android:paddingTop="5dp"
        android:paddingLeft="5dp" 
        android:text="哈哈哈哈哈哈">
        </TextView>
    </LinearLayout>

#2


用个背景图片

#3


我没有那么做过!
我一般是用一个有边框的图片来做TextView的背景图片!

#4


背景圖吧,google本身的應用也是這麼做的,沒必要自己畫吧

#5


楼主的代码其实是可以画出来的,拿来试了一下,加下面两句就可以了,但是具体原因是什么还没找到.
=.=

public void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.getLocalVisibleRect(r);
r.bottom --;
r.right--;
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(1);
canvas.drawRect(r, mPaint);
}

#6


引用 1 楼 kenshintang1215 的回复:
画一个假的边框好了,不过如果你每个TextView都这样画的话看起来就很啰嗦了,还是你自己继承TextView的方法比较好.
给一个假边框的demo供你参考.
XML code

    <LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    and……


谢谢!这也是一个解决的办法,不过我还是觉得奇怪为何有一半的边界画不出来

#7


引用 5 楼 kenshintang1215 的回复:
楼主的代码其实是可以画出来的,拿来试了一下,加下面两句就可以了,但是具体原因是什么还没找到.
=.=
Java code

    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        this.getLocalVisibleRect(r);
        r.bottom --;
      ……


嗯,这个方法我也尝试过,是可以画出边界,不过如果这样做的话,当两个控件并排的时候,就会显得中间分隔的边界很粗了。

#8


背景图效果是最好的。

#9


该回复于2011-03-21 08:58:36被版主删除