Abhishek Batra
Abhishek Batra

Reputation: 1599

Android: Custom border for FrameLayout

I am trying to add a custom border to a framelayout. The framelayout is used as container for the fragment. Thus I want to display fragment with a border. The border should be external to framelayout and should not consume the space inside of framelayout. And it should adjust with change in screen size.

enter image description here

What i can think right now is some sort of custom ViewGroup, add ImageView for border. Use image processing to get the inside area of imageview and in that area inflate a frame layout.

I am looking for some easy way out.

Upvotes: 3

Views: 3046

Answers (2)

Gagan
Gagan

Reputation: 1497

The easiest solution for this would be to create a 9-patch drawable and set it as the background for your FrameLayout. I have created the below 9-patch drawable that you can use. Hope this suffice your requirement.

enter image description here

Upvotes: 5

jskierbi
jskierbi

Reputation: 1635

You can obtain the effect via layout XML using for example LinearLayouts with proper layout_weight, so your centre-most FrameLayout will expand to take up available space.

There are 4 drawables used: for top, bottom, left and right part of frame.

Check out this code:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/border_left" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="fitXY"
            android:src="@drawable/border_top" />

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1">

                <!-- FrameLayout content goes here -->

            </FrameLayout>

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="fitXY"
            android:src="@drawable/border_top" />

    </LinearLayout>

    <ImageView
        android:layout_width="wrap_conttXY"
        android:layout_height="match_parght"
        android:scaleType="fient"
        android:src="@drwable/border_right" />

</LinearLayout>

Upvotes: 4

Related Questions