Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改Android搜索对话框的外观_Java_Android_Kotlin - Fatal编程技术网

Java 更改Android搜索对话框的外观

Java 更改Android搜索对话框的外观,java,android,kotlin,Java,Android,Kotlin,我正在尝试使用搜索对话框在android应用程序中实现搜索功能。在阅读了文档之后,我在应用程序中按下搜索按钮时出现了这个搜索对话框 正如您所看到的,搜索对话框太小(应用程序栏可以在其下方看到),它没有居中,并且在后退按钮附近包含应用程序图标 指南中显示的搜索对话框在应用程序栏中垂直居中,在“后退”按钮附近没有应用程序图标,这也是我要为搜索对话框执行的操作。但我似乎找不到任何关于如何做到这一点的资源。有人能帮我吗 提前谢谢 编辑:以下是启用搜索对话框的代码 MainActivity.kt cla

我正在尝试使用搜索对话框在android应用程序中实现搜索功能。在阅读了文档之后,我在应用程序中按下搜索按钮时出现了这个搜索对话框

正如您所看到的,搜索对话框太小(应用程序栏可以在其下方看到),它没有居中,并且在后退按钮附近包含应用程序图标

指南中显示的搜索对话框在应用程序栏中垂直居中,在“后退”按钮附近没有应用程序图标,这也是我要为搜索对话框执行的操作。但我似乎找不到任何关于如何做到这一点的资源。有人能帮我吗

提前谢谢

编辑:以下是启用搜索对话框的代码

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>
<?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>

我做了一个不同的搜索方法,我使用了Android Studio搜索视图, 这是主要的活动代码:

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    MenuItem item = menu.findItem(R.id.mySearchButton);
    SearchView searchView = (SearchView)item.getActionView();

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

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });

    return super.onCreateOptionsMenu(menu);
}
您必须创建一个Android资源文件,选择资源类型“菜单”,并根据需要调用它,然后添加此项:

    <item android:id="@+id/mySearchButton"
    android:title="Button"
    android:icon="@drawable/search_icon"
    app:actionViewClass="android.widget.SearchView"
    app:showAsAction="always"/>

此代码适用于我,图片如下:


我希望它也适用于您。

使用创建搜索对话框所需的方法,这是它可以实现的最相似的方面:

这是我实现的代码:

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>

我在drawable文件夹中创建了菜单图标,但如果需要,可以更改为其他图标

此外,我还为您可以添加到searchView的所有自定义设置留下了几个链接:


我希望这是适合您的解决方案。

与您的问题相关的代码将help@Abِ我添加了代码请发布
mainactivity
xml文件,这就是乐趣所在is@forthelulx我在使用本机搜索栏时添加了它,它总是有限制,根据您的需求修改搜索栏总是很困难,因此最好创建自己的自定义搜索栏,这样您就可以确保它易于管理,即使在将来也不需要进行大量更改。我知道这是在android中实现搜索的另一种方法。但我想知道,使用我介绍的方法是否有可能实现相同的外观