Android: give a webview rounded corners?

I’m trying to give my webView rounded corners.

Here is my code:

  • To divide a circle into different regions for a dart board?
  • Partially selected checkbox on Android?
  • Android how to video record, upload, transcode, download, play
  • How to correctly create a Tablayout now that the Tabactivity is deprecated?
  • Implementing proper back navigation and home button handling using Toolbar in Android
  • Call requires API level 23 (current min is 14): android.app.Activity#requestPermissions,checkSelfPermission
  • rounded_webview.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
     <solid android:color="#000"/>
        <corners
         android:bottomRightRadius="15dp"
         android:bottomLeftRadius="15dp"
      android:topLeftRadius="15dp"
      android:topRightRadius="15dp"/>
    </shape>
    

    And here is my webView:

    <WebView
            android:id="@+id/webView1"
            android:layout_width="293dp"
            android:layout_height="142dp"
            android:layout_gravity="center_horizontal"
            android:padding="5dip"
            android:background="@drawable/rounded_webview"/>
    

    But it simply won’t work! Corners are not rounded…

    Many thanks in advance,

    Related posts:

    Application does not show up in Android Market for Motorola XOOM tablet
    Problem with android MediaRecorder setVideoSize()
    Android Pros &amp; Cons: Event Bus and RxJava
    Android - Load PDF / PDF Viewer
    Click home icon with Espresso
    How to retrieve an Facebook-AuthToken from the accounts saved on Android
  • How to refresh Gallery after deleting image from SDCard
  • Android Web-View : Inject local Javascript file to Remote Webpage
  • VFY: unable to resolve static method 10876: Android
  • setContentView() slow with map fragment
  • How to build a Horizontal ListView with RecyclerView?
  • how to merge to two bitmap one over another
  • 4 Solutions collect form web for “Android: give a webview rounded corners?”

    The only way is wrap WebView element by other view (FrameLayout for example), and apply rounded corners background on external view.
    Example:

    <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="10dip"
            android:paddingBottom="10dip"
            android:paddingLeft="1dip"
            android:paddingRight="1dip"
            android:background="@drawable/white_rounded_area"
            >
        <WebView
                android:id="@+id/web_view"
                android:layout_width="300dip"
                android:layout_height="400dip"
                android:layout_gravity="center"
                />
    </FrameLayout>
    

    Where paddingTop and paddingBottom equals radius from drawable/white_rounded_area,
    paddingLeft and paddingRight equals stroke width drawable/white_rounded_area.

    Minus of this approach is top an bottom rounded panels can have different background color with web page inside WebView, especially when page scrolled.

    This is a little quirk of Webview, it has a default background color of white, drawn in front of any drawables. You’ll need to use the following code to make it transparent and show your drawable background:

    WebView webview = (WebView)findViewById(R.id.webView1);        
    webview.setBackgroundColor(0);
    

    try this

    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
             android:shape="rectangle" >
    
        <corners 
           android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" 
           android:topLeftRadius="10dp" android:topRightRadius="10dp"/>
    
          <stroke
            android:color="@drawable/black"
            android:width="3dp"/>
    
    </shape>
    

    I use an image that looks like a picture frame, where I give the frame the rounded corners. I lay this picture frame over the view I’m trying to give the rounded corners to.

    This gets over the problem in iBog’s solution of background panels not working nicely.


    The trick is to use a RelativeLayout; place your layout inside it.
    Below your layout, add another ImageView, setting its background to a suitable masking image frame. This will draw that on top of your other layout.

    In my case, I made a 9Patch file which was a grey background, with a transparent rounded rectangle cut out of it.

    frame

    This creates the perfect mask for your underlying layout.

    The XML code could be something like this:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_height="wrap_content" android:layout_width="fill_parent">
    
        <!-- ... INSERT ANY VIEW HERE ... -->
    
        <!-- FRAME TO MASK UNDERLYING VIEW -->
        <ImageView android:layout_height="fill_parent" 
            android:layout_width="fill_parent" 
            android:background="@drawable/grey_frame"
            android:layout_alignTop="@+id/mainLayout"
            android:layout_alignBottom="@+id/mainLayout" />
    
    </RelativeLayout>
    

    The full details can be found in my original answer here:

    • Android XML rounded clipped corners
    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.