【问题标题】:Android - searchview with auto complete feature inside action barAndroid - 在操作栏中具有自动完成功能的搜索视图
【发布时间】:2013-04-04 07:48:54
【问题描述】:

我想构建一个应用,其中包含夏洛克操作栏和搜索视图。但是,我希望这个 searchview 具有自动完成功能,就像 autocompleteTextView 一样。是否有任何直接的实现可以单独使用 searchview 来做到这一点?还是我应该在操作栏中使用 autocompleteTextView 来做到这一点?我在那里找到了几个帖子,但没有一个对我有帮助。这些帖子只谈论创建 autocompleteTextView ,但我希望搜索视图具有此功能。知道怎么做吗?

【问题讨论】:

    标签: android actionbarsherlock autocompletetextview searchview


    【解决方案1】:

    为此,我使用 AutoCompleteTextView 创建了一个布局并将其添加到 ActionBar 它的调用 Custom layout in ActionBar.

    之后我使用android.R.layout.simple_dropdown_item_1line 创建适配器。将其设置为AutoCompleteTextView

    检查下面的代码:

    package com.example.testapp;
    
    import android.annotation.TargetApi;
    import android.app.ActionBar;
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.AutoCompleteTextView;
    
    @TargetApi(11)
    public class MainActivity extends Activity {
    
        private static final String[] COUNTRIES = new String[] { "Belgium",
                "France", "France_", "Italy", "Germany", "Spain" };
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ActionBar actionBar = getActionBar();
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setDisplayShowCustomEnabled(true);
            // actionBar.setDisplayShowTitleEnabled(false);
            // actionBar.setIcon(R.drawable.ic_action_search);
    
            LayoutInflater inflator = (LayoutInflater) this
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v = inflator.inflate(R.layout.actionbar, null);
    
            actionBar.setCustomView(v);
    
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_dropdown_item_1line, COUNTRIES);
            AutoCompleteTextView textView = (AutoCompleteTextView) v
                    .findViewById(R.id.editText1);
            textView.setAdapter(adapter);
    
        }
    
    }
    

    你的布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Action Bar:"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#FFFFFF" />
    
        <AutoCompleteTextView
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:imeOptions="actionSearch"
            android:inputType="textAutoComplete|textAutoCorrect"
            android:textColor="#FFFFFF" >
    
            <requestFocus />
        </AutoCompleteTextView>
    
    </LinearLayout>
    

    欲了解更多详情,请查看这篇文章:onetwothree

    祝你好运!

    【讨论】:

    • 老兄,请补充说明
    【解决方案2】:

    我有一个不使用自动完成文本视图的简单方法,只需放置一个简单的列表适配器,其中包含项目的 ArrayList(itemArrayList),以使用搜索视图进行建议。将适配器设置为您的 SearchAutoComplete 和自动完成功能将下面的工作是我的代码。有了这个,你不必使用额外的布局。

     @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    
    MenuItem searchItem = menu.findItem(R.id.search);
    SearchView mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    
    SearchAutoComplete searchAutoComplete = (SearchAutoComplete)     mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchAutoComplete.setTextColor(Color.WHITE);
    
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line, itemArrayList);
    searchAutoComplete.setAdapter(adapter);
    
    SearchManager searchManager =
    (SearchManager) getSystemService(this.SEARCH_SERVICE);
    mSearchView.setSearchableInfo(
    searchManager.getSearchableInfo(getComponentName()));
    return true;
    }
    

    单击建议的项目,该项目应出现在搜索视图中,因此在 onCreateOptionmenu(...) 方法中将适配器设置为 searchAutoComplete 后添加以下代码。

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {
    // TODO Auto-generated method stub
    
    String searchString=(String)parent.getItemAtPosition(position);
    searchAutoComplete.setText(""+searchString);
    Toast.makeText(MainActivity.this, "you clicked "+searchString, Toast.LENGTH_LONG).show();
    
    }
    });
    

    你也可以在这个Link看到完整的代码

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      相关资源
      最近更新 更多