2017-07-21 3 views
1

Ich erstelle ein benutzerdefiniertes RelativeLayout, um einen Rahmen hinzuzufügen. Der Rahmen wird nicht angezeigt. Wenn ich Hintergrundattribut hinzufüge, erscheint die Grenze. Wenn ich Hintergrundattribute entferne, verschwindet Rand. Ich möchte Rand ohne Hintergrundattribut zeigen. Kann mir jemand erklären, wie ich dieses Problem lösen kann.Benutzerdefinierte RelativeLayout-Grenze, die nicht angezeigt wird

Hier ist mein Code ...

public class BorderRelativeLayout extends RelativeLayout { 

Paint paint; 
Rect rect; 

public BorderRelativeLayout(Context context) { 
    super(context); 
    init(); 
} 

public BorderRelativeLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

public void init(){ 
    paint = new Paint(); 
    paint.setColor(Color.RED); 
    paint.setAntiAlias(true); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeWidth(20f); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    rect = new Rect(0,0,getWidth(),getHeight()); 
    canvas.drawRect(rect,paint); 
} 

}

+0

Ihr Design hochladen. Vielleicht kann ich Ihnen helfen, anstatt ein Layout anzupassen –

Antwort

1

Für RelativeLayout wird onDraw() nicht, wenn Sie einen Hintergrund gesetzt haben genannt. Sie können also auf diese Weise keinen Rahmen erstellen.

Sie können jedoch einen Rahmen viel einfacher zu Ihrem RelativeLayout hinzufügen als durch Erstellen einer benutzerdefinierten Unterklasse. Erstellen Sie einfach eine in XML und weisen Sie sie Ihrem Layout zu.

border.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <stroke 
     android:width="5dp" 
     android:color="#f00"/> 

</shape> 

layout.xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/border"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="24dp" 
     android:textColor="#000" 
     android:textStyle="bold" 
     android:text="hello world"/> 

</RelativeLayout> 

enter image description here

+0

Kann ich ShapeDrawable programmatisch erstellen und die Farbe zur Laufzeit ändern? –

+0

@ChanMyaeAung Sie können. Lesen Sie hier https://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.html und hier https://developer.android.com/reference/android/graphics/drawable/shapes/Shape.html –

Verwandte Themen