Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android custom searchView rounded corners

I want to create an Activity with a SearchView that is not in the ActionBar (in fact, I'm using the NoActionBar theme). Now I want this SearchView to have rounded corners (not the EditText inside the actual SearchView, but the SearchView itself),

like this: Mockup

All I can manage is this: actual SearchView.

Can somebody hint me to what I have to change? XML of the Activity:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false">
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:background="@color/theBlue">

    <SearchView
        android:id="@+id/search_view"
        android:layout_width="1000dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:background="@drawable/bg_white_rounded"
        android:clickable="true"/>
</RelativeLayout>

Code of drawable/bg_white_rounded.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff"/>
<corners android:radius="10dp"/>
<padding android:left="0dp"
    android:bottom="0dp"
    android:right="0dp"
    android:top="0dp"/>
</shape>

Code of the Activity:

public class MainActivity extends AppCompatActivity {

SearchView searchView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Get search view and modify it to our needs
    searchView = (SearchView) findViewById(R.id.search_view);
    searchView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            searchView.onActionViewExpanded();
        }
    });
    //int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
    //int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_badge", null, null);
    View searchPlate = searchView.findViewById(searchPlateId);
    //View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchPlate.setBackgroundResource(R.drawable.bg_white_rounded);
}
}

The commented lines are things I've already tried but didn't work. Thanks!

like image 330
N4zroth Avatar asked Sep 26 '15 12:09

N4zroth


People also ask

How do I round corners in Android?

xml file and add an attribute to that TextView, for which you want to add rounded corners. The attribute is android: background=”@drawable/rounded_corner_view”.

How do I make rounded shapes in Android?

Create a rounded shape drawable and set it as your view's background: android:background="@drawable/round_outline" Clip to outline in code: setClipToOutline(true)

What is Android App rounded?

Android 12 introduces Rounded Corner API that enables you to get the properties of a screen's rounded corners, such as its center and its radius. As you can see in the image above, with this API you app can be made aware of the screen's rounded corner and avoid truncating the UI elements.


1 Answers

drawable/bg_white_rounded.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff"/>
<corners android:radius="20dp"/>
<padding android:left="15dp"
    android:bottom="15dp"
    android:right="15dp"
    android:top="15dp"/>
</shape>

and in .xml

<SearchView
    ...
    android:submitBackground="@drawable/bg_white_rounded"
    android:background="@drawable/bg_white_rounded"

NOTE: in my situation, solution is combined from above answers. Thanks to @rajan.kali and @A.Kazarovets

like image 108
n-y Avatar answered Oct 02 '22 16:10

n-y