java - 更改 Android 搜索对话框的外观

标签 java android kotlin

我正在尝试使用搜索对话框将搜索功能实现到 android 应用程序中。遵循文档后,在我的应用程序中按下搜索按钮时,我得到了这个搜索对话框。
Screenshot of the emulator
如您所见,搜索对话框太小(在其下方可以看到应用栏),它没有居中,并且在返回按钮附近包含应用图标。
指南中显示的搜索对话框在应用程序栏中垂直居中,并且在后退按钮附近没有应用程序图标,这也是我想要为我的搜索对话框执行的操作。但我似乎找不到任何关于如何做到这一点的资源。谁能帮我吗?
提前致谢!
编辑:这是启用搜索对话框的代码MainActivity.kt

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val root = binding.root
        setContentView(root)
        //Setup the app bar
        setSupportActionBar(binding.toolbar);

    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        val inflater = menuInflater;
        inflater.inflate(R.menu.app_bar_menu, menu)
        return true;
    }

    override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
        R.id.action_search -> {
            onSearchRequested()
            true
        }
        else -> {
            super.onOptionsItemSelected(item)
        }
    }
}
searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/search_hint"
    android:label="@string/app_name">

</searchable>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:title="@string/app_name" />

</androidx.constraintlayout.widget.ConstraintLayout>

最佳答案

使用您想要创建搜索对话框的方法,这是它可以实现的最相似的方面:
/image/hwTlF.png
这是我实现的代码:
MainActivity.class 代码:

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

@SuppressLint("ResourceType")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(true);
    searchView.setIconified(false);
    
    //Here you can set the parameters of the search view

    return true;
}
我创建了一个名为 options_menu.xml 的菜单资源文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
    android:title="title"
    android:icon="@drawable/search_icon"
    app:showAsAction="collapseActionView|ifRoom"
    app:actionViewClass="android.widget.SearchView" />

</menu>
以及名为 search.xml 的可搜索 xml 文件
<?xml version="1.0" encoding="utf-8"?>
<Searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="Your hint"
    android:label="Label text">
</Searchable>
我在可绘制文件夹中创建了菜单图标,但您可以根据需要更改为其他图标。
我还留下了几个链接,指向您可以添加到 searchView 的所有自定义项:
https://developer.android.com/guide/topics/search/searchable-config
https://developer.android.com/reference/android/widget/SearchView
我希望这是适合您的解决方案。

关于java - 更改 Android 搜索对话框的外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62592008/

相关文章:

java - 将静态方法应用于存储在子类中的数据

java - 如何在DynamoDB中获取大数据?

android - 如何在 Android 应用程序中实现评级功能?

java - 从 Java 程序调用 Kotlin 时找不到 kotlin-reflection.jar

android - 如何在 Android Kotlin 的 For 循环中获取列表项的索引?

java - ControlsFX 8.20.7 向导示例 - 让向导工作

java - 动态 block 大小的 Spring Batch 自定义完成策略

java - restAssured - 无法掌握post方法

java - IndexOutOfBoundsException 后检查

android - android os及其内核是用什么编程语言编写的?