2016-08-30 40 views

回答

1

您可以通过自定义Drawable来实现此目的。喜欢的东西:

public class BackgroundColorDrawable extends Drawable { 

    private Paint paint; 
    private RectF rectF; 
    private float cornerRadius = 20f; 
    private float borderThickness = 3.5f; 
    private int insetColour = Color.GREEN; 

    public BackgroundColorDrawable() { 

     paint = new Paint(); 
     paint.setAntiAlias(true); 
     rectF = new RectF(); 
    } 

    public void setInsetColour(int insetColour) { 
     this.insetColour = insetColour; 
     invalidateSelf(); 
    } 

    public void setBorderThickness(float borderThickness) { 
     this.borderThickness = borderThickness; 
     invalidateSelf(); 
    } 

    public void setCornerRadius(float cornerRadius) { 
     this.cornerRadius = cornerRadius; 
     invalidateSelf(); 
    } 

    @Override 
    public void draw(Canvas canvas) { 

     paint.setColor(Color.GRAY); 
     rectF.set(0f, 0f, canvas.getWidth(), canvas.getHeight()); 
     canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paint); 

     paint.setColor(Color.WHITE); 
     rectF.set(borderThickness, borderThickness, canvas.getWidth() - borderThickness, canvas.getHeight() - borderThickness); 
     canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paint); 

     paint.setColor(insetColour); 
     rectF.set(borderThickness, borderThickness, 60f, canvas.getHeight() - borderThickness); 
     canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paint); 

     paint.setColor(Color.WHITE); 
     rectF.set(30f, borderThickness, 60f, canvas.getHeight() - borderThickness); 
     canvas.drawRect(rectF, paint); 
    } 

    @Override 
    public void setAlpha(int alpha) { /* to implement */ } 

    @Override 
    public void setColorFilter(ColorFilter colorFilter) { /* to implement */} 

    @Override 
    public int getOpacity() { 
     return PixelFormat.TRANSLUCENT; 
    } 
} 

那么无论你正在使用你的EditText你只需要在代码中设置背景绘制:

BackgroundColorDrawable drawable = new BackgroundColorDrawable(); 
editText.setBackground(drawable); 

注有在这个例子相当多透支的(相同的像素达到绘制几次),你可以优化。

您还需要在EditText上设置一些左填充以便光标正确排列。

+0

感谢您的答案,这是非常好的解决方案,正是我所期待的。 @Jahnold – Krrish

0

您可以在EditText
editText.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.pic_name, 0);

使用 background-image
+0

是的,我知道它,但没有使用图像是有办法的,就像使用一些选择器。 @CodeWalker – Krrish