更改TextView样式Android应用程序

时间:2012-03-21 02:42:16

标签: java android xml styles message

如何将Android应用程序中的TextView Style更改为我喜欢的任何设计?

用于消息传递:在气球内显示消息(如在iPhone inBox中)。

谢谢,

2 个答案:

答案 0 :(得分:3)

您可以在XML中更改textview的background属性,也可以通过编程方式执行此操作。使用9-patch工具创建背景图像。所以,图像拉伸不会出现问题。

还有一个选项是在资源文件夹中创建一个XML,如下所示,您可以对图像进行大量更改(渐变,角落,填充等)

    <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <gradient android:startColor="#FF00FF" android:endColor="#FFFF00"
            android:angle="270"/>
    <solid android:color="#00000000"/>
    <stroke android:width="1dp" android:color="@color/round_rect_shape_border"/>
     <padding android:left="7dp" android:top="7dp"
            android:right="7dp" android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

使用它作为Textview的背景。

答案 1 :(得分:2)

回答你的问题不仅适用于textview,还适用于android中的其他view

您将需要一个新的自我类,扩展您需要更改样式的视图。

例如:

public class NewTextView extends TextView{

  public NewTextView(){} //just constructor

  @Override
  public void onDraw(Canvas canvas){
  //this is a main method that do your work.
  //for example, you will draw a `baloon` like iPhone
  }

这是一个示例代码,在EditText的每一行中绘制一条直线(就像您在纸上打字一样)。你可以看到这段代码,并学会这样做。

再说一遍:要做到这一点,你应该对android(Canvas或OpenGL)中的绘图有一些了解。

public class EditTextExtra extends EditText {
    private Rect Rect;
    private Paint Paint;

    public EditTextExtra (Context context, AttributeSet attrs) {
        super(context, attrs);
        Rect = new Rect();
        Paint = new Paint();
        Paint.setStyle(Paint.Style.FILL_AND_STROKE);
        Paint.setColor(Color.BLACK);       
    }

    @Override
    protected void onDraw(Canvas canvas) {

        int count = getHeight()/getLineHeight();
        if(getLineCount() > count){
            count = getLineCount();   // for long text with scrolling
        }
        Rect r = Rect;
        Paint paint = Paint;

        int baseline = getLineBounds(0, r); // first line

        for (int i = 0; i < count; i++) {
            canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint);
            baseline += getLineHeight(); // next line
        }
        super.onDraw(canvas);
    }
}