Android开发总结笔记 SearchView&Search(搜索相关) 1-3-7

来源:互联网 发布:网络叫萝卜什么意思啊 编辑:程序博客网 时间:2024/06/04 18:02
官方提供的搜索特性的方式有两种
  • 利用SearchView组件实现(听说太老了)
  • 利用Android系统提供的Search Dialog
SearchView
xml属性
  • android:iconifiedByDefault    设置SearchView的默认状态
  • android:imeOptions            设置输入法编辑器的选项,搜索,下一步什么的
  • android:inputType            设置输入类型
  • android:maxWidth            设置SearchView的长度 
  • android:queryHint                    设置输入框的提示文字
另外还有三个监听器
  • SearchView.OnCloseListener        取消搜索后的回调
  • SearchView.OnQueryTextListener根据搜索框的文本变化回调
  • SearchView.OnSuggestionListener点击搜索建议时的回调

方法
  • setOnQueryTextFocusChangeListener                       当搜索框的焦点变化时的回调
  • setOnSearchClickListener                                             设置点击搜索按钮后的回调
  • setSuggestionsAdapter(CursorAdapter adapter)     设置一个搜索建议Adapter
mSvSearch.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "search start", Toast.LENGTH_SHORT).show();
}
});
mSvSearch.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
Toast.makeText(MainActivity.this, "search stop", Toast.LENGTH_SHORT).show();
return false;
}
});
mSvSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(MainActivity.this, "search submit", Toast.LENGTH_SHORT).show();
return false;
}
 
@Override
public boolean onQueryTextChange(String newText) {
Toast.makeText(MainActivity.this, "new text " + newText, Toast.LENGTH_SHORT).show();
return false;
}
});


  • 利用Android系统提供的Search Dialog

    1、在res/xml目录下面新建一个searchable
    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/search_hint">
    </searchable>
    其中android:lable属性是必须的

    2、在AndroidManifest.xml注册Activity
    <activity android:name=".SearchActivity">
    <intent-filter>
    <action android:name="android.intent.action.SEARCH"></action>
    </intent-filter>
    <meta-data
    android:name="android.app.searchable"
    android:resource="@xml/searchable"></meta-data>
    </activity>
    meta-data中的数据必须是像上面的一样

    3、在所创建的SearchActivity中获取搜索的关键字
    public class SearchActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    //判断是否是搜索请求
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
    //获取搜索的查询内容(关键字)
    String query = intent.getStringExtra(SearchManager.QUERY);
    //利用query执行相应的查询动作
    }
    }
     
    }

    4、触发onSearchRequest()在MainActivity中激活搜索框
    public class MainActivity extends AppCompatActivity {
    private Button mBtnSearch;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mBtnSearch = (Button) findViewById(R.id.btn_search);
    setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
    mBtnSearch.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    onSearchRequested();
    }
    });
    }
     
     
    }

    效果图

    device-2015-11-26-095543.png
    上面的操作只能在特定Activity触发搜索框。另外,如果你想要在程序的任何地方都可以触发搜索框,可以进行以下设置
    <activity android:name=".SearchActivity"
    android:launchMode="singleTop">
    <intent-filter>
    <action android:name="android.intent.action.SEARCH"/>
    </intent-filter>
    <meta-data
    android:name="android.app.searchable"
    android:resource="@xml/searchable"/>
    </activity>
    <meta-data android:name="android.app.default_searchable"
    android:value=".SearchActivity"/>

    如果想在激活搜索框的时候做些其他的操作,可以重写OnSearchRequested方法
    @Override
    public boolean onSearchRequested() {
    //进行想要的一些操作
    return super.onSearchRequested();
    }

    5、给搜索框传输数据
    @Override
    public boolean onSearchRequested() {
    Bundle appData = new Bundle();
    appData.putBoolean(SearchableActivity.JARGON, true);
    startSearch(null, false, appData, false);
    return true;
    return super.onSearchRequested();
    }

    Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA);
    if (appData != null) {
    boolean jargon = appData.getBoolean(SearchableActivity.JARGON);
    }

    6、点击搜索之后会调到SearchActivity,如果设置的是Activity的启动模式是singleTop,要注意使用onNewIntent传输数据



    0 0