Округлый фон поиска с меню - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь поставить прямоугольник с закругленными углами для панели поиска , но я понятия не имею, как. Я протестировал много других кодов, которые мог найти в stackoverflow, но, поскольку я использую меню с элементом, который не использовался другими кодами, его трудно понять.

Вот мой java код :

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.example_menu, menu);

        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) searchItem.getActionView();

        searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                adapter.getFilter().filter(newText);
                return false;
            }
        });
        return true;
    }

А вот мой XML код:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/search_view_menu">

    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search"
        android:title="Search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="ifRoom|collapseActionView"/>

</menu>

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Вот решение вашей проблемы.

  1. Создайте изогнутый фон для вашего Edittext в папке для рисования
  2. Добавьте этот изогнутый фон в Edittext

Код решения:

Создайте файл с именем curve_edittext_bg в папке Drawable

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#ffffff"/>
            <corners android:radius="6dp" />
            <stroke
                android:width="1dp"
                android:color="#27000000"
                />
        </shape>
    </item>
</selector> 

Теперь добавьте curve_edittext_bg в Edittext

    <TextView
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:drawableStart="@drawable/ic_location_blast_blue"
                android:drawableEnd="@drawable/search"
                android:drawablePadding="10dp"
                android:background="@drawable/curve_edittext_bg"
                android:ellipsize="end"
                android:layout_margin="10dp"
                android:layout_alignParentTop="true"
                android:gravity="start|center_vertical"
                android:padding="16dp"
                android:text="Search location"
                android:textColor="@color/quantum_grey600" /> 

Мы находимся сделано 101

Пример вывода

Вывод изображения

1 голос
/ 01 апреля 2020

Вы должны получить доступ к дочернему элементу edittext внутри окна поиска и вместо этого изменить фоновый ресурс этого представления. Я использовал ваши xml файлы и просто изменил вашу onCreateOptionsMenu функцию следующим образом:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);

        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) searchItem.getActionView();
        searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);

        //This is where you find the edittext and set its background resource
        View searchPlate = searchView.findViewById(androidx.appcompat.R.id.search_src_text);
        searchPlate.setBackgroundResource(R.drawable.rounded_search);

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                Log.d("Text changed", newText);
                return false;
            }
        });
        return true;
    }

А вот дополнительная 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="8dp"/>
</shape>

Изменение значения радиуса изменяет округлость углов.

...