我正在尝试确定SearchViewActionBar 中的 a 是否获得焦点。但是当我打电话时,SearchView.isFocused()我总是得到false结果,即使视图真正聚焦(内部有光标,并且显示软键盘)。
如何检查 a 是否SearchView聚焦?
我按照@David在本主题中建议的SearchView方式实现了。有谁知道如何将最近的查询建议添加到 Fragment 中的 SearchView 中? Fragment
我正在使用此处定义的可搜索配置在我的活动中实现语音搜索。但是,如果设备的区域设置不同,设置android:voiceLanguage="tr"似乎不起作用。搜索应用程序对话框将在设备的区域设置以及搜索结果中打开。我使用SearchView,因此无法捕获该onSearchRequested函数,否则我可以以编程方式指定参数。设备区域设置为俄语,因此搜索查询会以西里尔语返回。如何强制以土耳其语或至少英语区域设置返回搜索结果?
可搜索.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:voiceLanguage="tr"
android:voiceLanguageModel="web_search"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" />
Run Code Online (Sandbox Code Playgroud)
搜索视图设置
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchItem = menu.findItem(R.id.search);
searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setQueryHint(getString(R.string.search));
searchView.setOnQueryTextListener(new SearchWatcher());
if (searchManager != null)
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return true;
}
Run Code Online (Sandbox Code Playgroud)
处理搜索结果
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
searchView.setQuery(query, false);
}
}
Run Code Online (Sandbox Code Playgroud) 我已经实现了以下代码,但我的SearchActivity :: OnCreate没有被调用.有人可以告诉我我错过了什么吗?
AndroidManifest.xml中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kace.SearchTest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<meta-data android:name="android.app.default_searchable" android:value=".SearchActivity"/>
<activity
android:name=".Search_testActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SearchActivity" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
/res/xml/searchable.xml:
<?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/description" >
</searchable>
Run Code Online (Sandbox Code Playgroud)
SearchActivity.java:
public class SearchActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{ …Run Code Online (Sandbox Code Playgroud) 与SearchView交互时或者与Searchview加载的活动时会出现此问题.在setIconifiedByDefault(true)与SearchView交互时加载活动后发生使用问题,但在setIconifiedByDefault(false)活动加载时使用问题时.
LogCat中输出以下错误:
java.lang.NullPointerException
at android.widget.SearchView.adjustDropDownSizeAndPosition(SearchView.java:1244)
Run Code Online (Sandbox Code Playgroud)
这是代码:
ExampleActivity.java
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.example, menu);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView search = (SearchView) menu.findItem(R.id.search).getActionView();
search.setSearchableInfo(manager.getSearchableInfo(getComponentName()));
search.setIconifiedByDefault(true);
search.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// Perform search
return true;
}
});
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
菜单/的example.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/search"
android:title="Search"
android:showAsAction="ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>
Run Code Online (Sandbox Code Playgroud)
XML/searchable.xml
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/search"
android:hint="@string/search" >
</searchable>
Run Code Online (Sandbox Code Playgroud)
searchable.xml中使用的"搜索"字符串在values/strings.xml中定义.此外,在AndroidManifest.xml的activity标记中正确引用了searchable.xml文件:
<meta-data …Run Code Online (Sandbox Code Playgroud) 在下面的屏幕截图中,SearchView窗口小部件ActionBar不占用整个可用空间.

我需要它占据所有水平空间ActionBar(因此它横跨整个屏幕).
我尝试了什么:
以编程方式,尝试了这个onCreateOptionsMenu:
View searchViewView = (View) searchView;
searchViewView.getLayoutParams().width=LayoutParams.MATCH_PARENT;`
Run Code Online (Sandbox Code Playgroud)
这给出了:
java.lang.NullPointerException: Attempt to write to
field 'int android.view.ViewGroup$LayoutParams.width' on a null
object reference ...
TestActionBarTwo.MainActivity.onCreateOptionsMenu(MainActivity.java:57)
Run Code Online (Sandbox Code Playgroud)并在菜单资源中:
本android:layout_width="match_parent"似乎并没有造成任何影响.
我也试过android:layout_weight="1"(假设
ActionBar有a LinearLayout),但这也不起作用.
那么有没有一种方法SearchView(没有图标化)占据整个水平空间ActionBar?
编辑1
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.i(TAG, "onCreateOptionsMenu OF MainActivity CALLED."); //check
getMenuInflater().inflate(R.menu.activity_main_action_bar_menu, menu);
getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
// SearchAction
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
SearchView searchView …Run Code Online (Sandbox Code Playgroud) android android-layout layoutparams android-actionbar searchview
试图让searchview在app上运行.
sdk min 17 max 22
在模拟器api上测试18
菜单xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"/>
<item android:id="@+id/search"
android:icon="@drawable/ic_action_search"
android:title="@string/search_title"
app:showAsAction="ifRoom|collapseActionView"
android:orderInCategory="200"
app:actionViewClass="android.support.v7.widget.SearchView">
</item>
<item android:id="@+id/scan"
android:title="@string/scan"
android:showAsAction="ifRoom"
android:orderInCategory="300">
</item>
</menu>
Run Code Online (Sandbox Code Playgroud)
onCreateOptionsMenu
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Inflate the menu; this adds items to the action bar if it is present.
inflater.inflate(R.menu.material_toolbar, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Log.d(TAG, "onQueryTextSubmit");
return false;
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 就像这个屏幕截图一样 - 在snapdeal,flipkart app中的SearchBar外/下工具栏......
我试图在Fragment中使用建议(过滤器)实现SearchView,但我还没有管理它.我几乎尝试了每个教程,但没有任何方法适合我.我将不胜感激任何帮助.谢谢
XML ......
<!--appBar layout-->
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
<!--searchView layout-->
<android.support.v7.widget.SearchView
android:id="@+id/search_view"
app:layout_scrollFlags="scroll|enterAlways"
android:iconifiedByDefault="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:closeIcon="@drawable/ic_clear_white_18dp"
app:searchIcon="@drawable/ic_search_white_24dp"
app:queryHint="@string/search_contact"
app:iconifiedByDefault="false"
android:background="@color/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
</android.support.design.widget.AppBarLayout>
<!-- recycler view-->
<android.support.v7.widget.RecyclerView
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)
分段
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_contact_list, container, false);
searchView = (SearchView)view.findViewById(R.id.search_view);
fabButton = (FloatingActionButton)view.findViewById(R.id.fab_button);
//recycler view
recyclerView = (RecyclerView)view.findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
contacts = SugarRecord.listAll(Contact.class);
contactsAdapter = new ContactsAdapter(getActivity(), contacts);
recyclerView.setAdapter(contactsAdapter);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override …Run Code Online (Sandbox Code Playgroud) android adapter searchview recycler-adapter android-recyclerview
我尝试找到一种为SearchView设置文本的方法,但找不到任何内容?有谁知道这样做的任何方法吗?例如这样的事情
searchView.setText("blah blah");
Run Code Online (Sandbox Code Playgroud) android ×10
searchview ×10
adapter ×1
android-collapsingtoolbarlayout ×1
eclipse ×1
layoutparams ×1
widget ×1