How to make layout with rounded corners..?

后端 未结 18 2908
独厮守ぢ
独厮守ぢ 2020-11-22 09:37

How can I make a layout with rounded corners? I want to apply rounded corners to my LinearLayout.

相关标签:
18条回答
  • 2020-11-22 09:58

    I have done this way:

    Check Screenshot:

    Create drawable file named with custom_rectangle.xml in drawable folder:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle" >
    
        <solid android:color="@android:color/white" />
    
        <corners android:radius="10dip" />
    
        <stroke
            android:width="1dp"
            android:color="@android:color/white" />
    
    </shape>
    

    Now apply Rectangle background on View:

    mView.setBackground(R.drawlable.custom_rectangle);
    

    Done

    0 讨论(0)
  • 2020-11-22 09:58

    Function for set corner radius programmatically

    static void setCornerRadius(GradientDrawable drawable, float topLeft,
            float topRight, float bottomRight, float bottomLeft) {
        drawable.setCornerRadii(new float[] { topLeft, topLeft, topRight, topRight,
                bottomRight, bottomRight, bottomLeft, bottomLeft });
    }
    
    static void setCornerRadius(GradientDrawable drawable, float radius) {
        drawable.setCornerRadius(radius);
    }
    

    Using

    GradientDrawable gradientDrawable = new GradientDrawable();
    gradientDrawable.setColor(Color.GREEN);
    setCornerRadius(gradientDrawable, 20f);
    //or setCornerRadius(gradientDrawable, 20f, 40f, 60f, 80f); 
    
    view.setBackground(gradientDrawable);
    
    0 讨论(0)
  • 2020-11-22 09:59

    A better way to do it would be:

    background_activity.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:gravity="fill">
            <color android:color="@color/black"/>
        </item>
        <item>
            <shape android:gravity="fill">
                <solid android:color="@color/white"/>
                <corners android:radius="10dip"/>
                <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
            </shape>
        </item>
    </layer-list>
    

    This will work below API 21 also, and give you something like this:


    If you are willing to make a little more effort more better control, then use android.support.v7.widget.CardView with its cardCornerRadius attribute (and set elevation attribute to 0dp to get rid of any accompanying drop shadow with the cardView). Also, this will work from API level as low as 15.

    0 讨论(0)
  • 2020-11-22 10:00

    Use CardView to get rounded edges for any layouts. Use card_view:cardCornerRadius="5dp" for cardview to get rounded layout edges.

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:card_view="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical">
    
          <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            card_view:cardCornerRadius="5dp">
              <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:padding="15dp"
                    android:weightSum="1">
    
                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight=".3"
                        android:text="@string/quote_code"
                        android:textColor="@color/white"
                        android:textSize="@dimen/text_head_size" />
    
                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight=".7"
                        android:text="@string/quote_details"
                        android:textColor="@color/white"
                        android:textSize="@dimen/text_head_size" />
                </LinearLayout>
           </android.support.v7.widget.CardView>
       </LinearLayout>
    
    0 讨论(0)
  • 2020-11-22 10:06

    Use CardView in android v7 support library. Though it's a bit heavy, it solves all problem, and easy enough. Not like the set drawable background method, it could clip subviews successfully.

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        card_view:cardBackgroundColor="@android:color/transparent"
        card_view:cardCornerRadius="5dp"
        card_view:cardElevation="0dp"
        card_view:contentPadding="0dp">
        <YOUR_LINEARLAYOUT_HERE>
    </android.support.v7.widget.CardView>
    
    0 讨论(0)
  • 2020-11-22 10:11

    For API 21+, Use Clip Views

    Rounded outline clipping was added to the View class in API 21. See this training doc or this reference for more info.

    This in-built feature makes rounded corners very easy to implement. It works on any view or layout and supports proper clipping.

    Here's What To Do:

    • Create a rounded shape drawable and set it as your view's background: android:background="@drawable/round_outline"
    • According to the documentation, then all you need to do is this: android:clipToOutline="true"

    Unfortunately, there seems to be a bug and this XML attribute currently is not recognized. Luckily, we can set the clipping in Java:

    • In your activity or fragment: View.setClipToOutline(true)

    What It Looks Like:

    enter image description here

    Special Note About ImageViews

    setClipToOutline() only works when the View's background is set to a shape drawable. If this background shape exists, View treats the background's outline as the borders for clipping and shadowing purposes.

    This means that if you want to round the corners on an ImageView with setClipToOutline(), your image must come from android:src instead of android:background (since background is used for the rounded shape). If you MUST use background to set your image instead of src, you can use this nested views workaround:

    • Create an outer layout with its background set to your shape drawable
    • Wrap that layout around your ImageView (with no padding)
    • The ImageView (including anything else in the layout) will now be clipped to the outer layout's rounded shape.
    0 讨论(0)
提交回复
热议问题