SearchView Get focus and pop soft keyboard
2014-03-07 16:02
555 查看
使用SearchView时,会碰到这种情况,就是:你需要控制SearchView的可见状态,并且让它显示时就让它是展开的,并且获取focus和pop soft keyboard。那你就可以考虑一下使用下面的方法来实现。
一、使用new 的方式来创建一个SearchView。
备注:
使用new的方式直接来创建一个SearchView,并使其获得focus并pop soft keyboard,这种方式OK。
但是如果你是使用xml文件来定义MenuItem来引入SearchView的话,那就要注意了:
在android:showAsAction这个属性中你要使用ifRoom,不要使用always,否则只能获取focus但输入光标没出现。
不过,如果你不是想让它一显示就展开的话,上面说的那个问题就不会存在了!
二、在上面的一中,我们使用的是new来创建SearchView,在这里我们使用Xml来定义创建SearchView
我这个例子是使用SearchView对PDF file进行text Search的。我这里
res/menu
最后,上面使用的是android.widget.SearchView,是在android sdk 11版本之后使用的。如果之前的话,就要使用到support lib了。sdk 11 之前的例子,待续。。。
=======================================================================================================
补充一下:
如果你要这个需求,就是在searchView的后面增加两个icon。如果你不限定SearchView的长度的话,它会把后面的icon挤掉的(也就是说会把后面的Icon覆盖掉,这样你就看不到了)。
我们可以根据手机屏幕的大小来限定SearchView的宽度:
一、使用new 的方式来创建一个SearchView。
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); ActionBar actionBar = getActionBar(); SearchView searchView = new SearchView(this); actionBar.setCustomView(searchView); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); searchView.setQuery("test",true); searchView.setFocusable(true); searchView.setIconified(false); searchView.requestFocusFromTouch(); // get focus mSearchView.requestFocus(); // get soft input InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); }
备注:
使用new的方式直接来创建一个SearchView,并使其获得focus并pop soft keyboard,这种方式OK。
但是如果你是使用xml文件来定义MenuItem来引入SearchView的话,那就要注意了:
<item android:id="@+id/action_find_str_item" android:actionViewClass="android.widget.SearchView" android:icon="@drawable/searchfile" android:orderInCategory="200" android:showAsAction="ifRoom|withText" android:title="@string/action_search" android:visible="false" />
在android:showAsAction这个属性中你要使用ifRoom,不要使用always,否则只能获取focus但输入光标没出现。
不过,如果你不是想让它一显示就展开的话,上面说的那个问题就不会存在了!
二、在上面的一中,我们使用的是new来创建SearchView,在这里我们使用Xml来定义创建SearchView
我这个例子是使用SearchView对PDF file进行text Search的。我这里
package com.example.actionbardemo; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.SearchView; import android.widget.SearchView.OnCloseListener; public class SearchViewDemoActivity extends Activity { private MenuItem mSearchViewMenuItem; private SearchView mSearchView; private Button btn_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.searchview_demo_layout); btn_show = (Button) findViewById(R.id.btn_show_search); btn_show.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mSearchViewMenuItem.isVisible()) { mSearchViewMenuItem.setVisible(false); }else { mSearchViewMenuItem.setVisible(true); // get focus mSearchView.requestFocus(); // get soft input InputMethodManager imm = (InputMethodManager) mSearchView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.searchview_menu_demo, menu); mSearchViewMenuItem = menu.findItem(R.id.search_menu_item); mSearchView = (SearchView) mSearchViewMenuItem.getActionView(); mSearchView.setIconifiedByDefault(false); // Expand SearchView input box mSearchView.setFocusable(true); mSearchView.setQueryHint("Type to Search"); mSearchView.setOnCloseListener(new OnCloseListener() { @Override public boolean onClose() { if(getCurrentFocus()!=null) { ((InputMethodManager) mSearchView.getContext().getSystemService(INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(getCurrentFocus() .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } return false; } }); return true; } }res/layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/btn_show_search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="show_hide" /> </LinearLayout>
res/menu
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/search_menu_item" android:menuCategory="alternative" android:orderInCategory="1" android:title="Type to search" android:visible="false" android:actionViewClass="android.widget.SearchView" android:showAsAction="ifRoom|withText"/> </menu>
最后,上面使用的是android.widget.SearchView,是在android sdk 11版本之后使用的。如果之前的话,就要使用到support lib了。sdk 11 之前的例子,待续。。。
=======================================================================================================
补充一下:
如果你要这个需求,就是在searchView的后面增加两个icon。如果你不限定SearchView的长度的话,它会把后面的icon挤掉的(也就是说会把后面的Icon覆盖掉,这样你就看不到了)。
我们可以根据手机屏幕的大小来限定SearchView的宽度:
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); mSearchView.setMaxWidth((int)(dm.widthPixels * 0.6));
相关文章推荐
- 在storyboard中的静态UITableView中拖入 UISearchBar and Search Display Controller出现的奇怪问题
- android <viewStub />, <requestFocus />, <merge /> and <include />用法
- java.lang.IllegalStateException: focus search returned a view that wasn't able to take focus!
- 在storyboard中的静态UITableView中拖入 UISearchBar and Search Display Controller出现的奇怪问题
- Native Client - Application - View Change, Focus, and Input Events
- Stack that Support Push, Pop, and GetMin in Constant Time
- search a file from directory and get storage directorys from android device(i use tablet here)
- android的xml中<viewStub />, <requestFocus />, <merge /> and <include />的用法
- 【Android问题及其解决】Android WebView 和 Soft keyboard 的显示隐藏问题
- <viewStub/>, <requestFocus />, <merge />and<include
- tap/click on search button on softkeyboard
- Get to the Top on Google: Tips and Techniques to Get Your Site to the Top of the Search Engine Ranki
- View and search Unix/Linux man pages
- Database.Search 和 View.GetAllDocumentByKey
- X Keyboard focus mechanism and typical operation of modern toolkits
- Pop and push the same view does not invoke the viewWillAppear() method (转载)
- SoftKeyboard按键View找焦点
- android <viewStub />, <requestFocus />, <merge /> and <include />用法
- focus and keyboard hide
- [Angular] @ViewChild and template #refs to get Element Ref