标签: android-search

MenuItemCompat.getActionView始终返回null

我刚刚实现了v7 AppCompat支持库,但在MenuItemCompat.getActionView我测试的每个Android版本中总是返回null(4.2.2,2.3.4 ....)

SearchView显示在操作栏上,但它不响应触摸操作,不会展开,以显示其EditText与就像一个简单的图标.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    if (searchView != null) {
        SearchViewCompat.setOnQueryTextListener(searchView, mOnQueryTextListener);
        searchView.setIconifiedByDefault(false);
        Log.d(TAG,"SearchView not null");
    } else
        Log.d(TAG, "SearchView is null");
    }
    return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)

menu.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/action_search"
          app:showAsAction="always|collapseActionView"
          android:icon="@drawable/abc_ic_search"
          android:title="@string/action_bar_search"
          android:actionViewClass="android.support.v7.widget.SearchView"/>

    <item android:id="@+id/action_refresh"
          android:icon="@drawable/refresh"
          android:title="@string/action_bar_refresh"
          app:showAsAction="ifRoom"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

android searchview android-search android-actionbar-compat

142
推荐指数
4
解决办法
5万
查看次数

如何在工具栏Android中的SearchView小部件中删除白色下划线

我在我的项目中使用工具栏搜索小部件.一切正常,但期待我完全坚持删除工具栏中搜索字段下方的下划线.我尝试过很多解决方案但没有任何效果.以下是我尝试过的一些解决方案.

要求是删除图像中的白色下划线

在此输入图像描述

Ist解决方案:

//Removing underline

    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
    View searchPlate = searchView.findViewById(searchPlateId);
    if (searchPlate!=null) {
        searchPlate.setBackgroundColor (Color.TRANSPARENT);
        int searchTextId = searchPlate.getContext ().getResources ().getIdentifier ("android:id/search_src_text", null, null);

    }
Run Code Online (Sandbox Code Playgroud)

第二解决方案:

 EditText searchEdit = ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text));
 searchEdit.setBackgroundColor(Color.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)

上面的代码用于更改EditText的背景,但仍然下划线显示在SearchBar中的关闭图标下方.

我用于SearchBar小部件的完整代码如下:

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater infl) {
        super.onCreateOptionsMenu(menu, infl);
        MenuInflater inflater = getActivity().getMenuInflater();
        inflater.inflate(R.menu.action_search, menu);
        final SearchView searchView = (SearchView) MenuItemCompat
                .getActionView(menu.findItem(R.id.search));

        SearchManager searchManager = (SearchManager) getActivity ().getSystemService (getActivity ().SEARCH_SERVICE);
        searchView.setSearchableInfo (searchManager.getSearchableInfo (getActivity ().getComponentName ()));

        //changing edittext color
        EditText searchEdit = …
Run Code Online (Sandbox Code Playgroud)

android searchview android-search android-toolbar

48
推荐指数
7
解决办法
3万
查看次数

如何在android中实现像gmail app这样的搜索栏?

我试图在我的Android应用程序中实现类似于最新的gmail应用程序(操作栏中的搜索图标)的搜索功能.

在此输入图像描述

点击"搜索"图标后,操作栏将变为搜索字段,左侧带有后退按钮,右侧带有麦克风按钮.我想在我的应用程序中使用相同的组件.

这有什么图书馆或教程吗?

这是否有可能在非棒棒糖版本中支持这种类型的材料设计搜索.?

android uisearchbar android-layout android-search material-design

23
推荐指数
2
解决办法
3万
查看次数

全局搜索在Android 4.4中未按预期运行

我有一个应用程序,它有两个扩展的搜索建议提供程序,SearchRecentSuggestionsProvider我已使用以下Intent过滤器和元数据在清单文件中正确设置:

<intent-filter>
   <action android:name="android.intent.action.SEARCH" />
</intent-filter>

<meta-data
   android:name="android.app.searchable"
   android:resource="@xml/searchable_tv" />
Run Code Online (Sandbox Code Playgroud)

可靠的资源包括android:includeInGlobalSearch="true",所以应该没问题.

我显然也有一个提供者:

<provider
   android:name="com.miz.contentprovider.TvShowContentProvider"
   android:authorities="com.miz.contentprovider.TvShowContentProvider"
   android:exported="true" />
Run Code Online (Sandbox Code Playgroud)

这一切在Android 4.3中使用Google搜索应用程序都运行良好,但我刚刚将所有设备更新到Android 4.4,我无法再在我的应用程序中搜索内容.在操作系统更新之前工作的其他应用程序也是如此,即Google Play音乐.

我在XDA开发人员身上发现了一个线程,如果有帮助的话,也会提到这个:http://forum.xda-developers.com/showthread.php?p = 474272102

有谁知道发生了什么或如何解决?

更新:我可以确认它只发生在安装了Android 4.4的设备上.我使用最新的Google搜索更新在Android 4.3设备上进行了测试,并且按预期工作.看起来这是Google更新中的一个错误.

android android-search android-4.4-kitkat

22
推荐指数
2
解决办法
3611
查看次数

SearchInfo总是空出来

我在操作栏中设置搜索视图时遇到问题.

我跟着开发者网站,但它不起作用.我觉得我错过了什么.

当我运行我的代码时,它总是输出"无法获取可搜索的信息"(MainActivity.setupSearchView()).

MainActivity.java

// package...
// imports...
public class MainActivity extends Activity {
    private static String tag = "Main Activity";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater mi = getMenuInflater();
        mi.inflate(R.menu.search_view, menu);
        setupSearchView(menu);
        return true;
    }
    private void setupSearchView(Menu menu) {
        SearchManager sm = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchableInfo si = sm.getSearchableInfo(getComponentName());
        if (si == null) {
            Log.wtf(tag, "failed to get searchable info");
            return;
        }
        SearchView sv = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        sv.setSearchableInfo(si);
        // …
Run Code Online (Sandbox Code Playgroud)

android android-searchmanager android-search

19
推荐指数
4
解决办法
6054
查看次数

如何以编程方式启动Google即时语音搜索?

我想在用户按下按钮时启动Google即时语音搜索.但是,我找不到意图在文档中开始搜索.

有人知道如何开始Google Now语音搜索的活动吗?

android android-search google-now

19
推荐指数
3
解决办法
2万
查看次数

操作栏 - ifRoom选项留下太多空间

我的操作栏上有问题,我尝试在其上设置搜索视图,以便使搜索栏可扩展.

这很好,除了我必须使用选项设置所有其他菜单项,ifRoom以便在单击搜索图标时让搜索字段占据所有空间.

这部分也运行良好,除了太多的菜单项被推入菜单溢出,垂直屏幕上只剩下2个图标(包括搜索栏).

我对另一个有5个菜单项的活动做了另一个测试:

  1. 在第一种情况下,我将所有这些设置为 android:showAsAction="always"
  2. 在第二种情况下,我将所有这些设置为``android:showAsAction ="ifRoom"`

结果如下:

情况1:

永远的情况

案例2:

ifRoom案例

为什么我使用ifRoom,只显示2个图标,而实际上5个可以轻松填满这个地方?

因此,我的搜索视图项旁边只有一个菜单项...

谢谢!

android android-actionbar android-search

18
推荐指数
1
解决办法
6860
查看次数

自定义SearchView整个可在android中点击

我的应用程序中有一个SearchView小部件,我想问一些关于使它自定义的问题.首先,您只能通过点击搜索图标开始搜索,有没有办法让整个SearchView可点击?此外,还有一种方法可以在单击时使SearchView显示为这样吗?

一只忙碌的猫http://i41.tinypic.com/rr2ow4.png ![] [1]

它现在处于这种状态:

一只忙碌的猫http://i41.tinypic.com/11jlu2p.png ![] [1]

这是我的代码:

citySearch = (SearchView) findViewById(R.id.city_search_bar);
citySearch.setBackgroundResource(R.drawable.search_background);
citySearch.setOnSearchClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        citySearch.setIconifiedByDefault(true);
        //citySearch.setIconified(true);
    }

});
citySearch.setOnQueryTextListener(new OnQueryTextListener() {

    @Override
    public boolean onQueryTextChange(String text) {

        ((Filterable) cityListView.getAdapter()).getFilter().filter(text);

        return false;
    }

    @Override
    public boolean onQueryTextSubmit(String text) {

        return false;
    }

});

try
{
    Field searchField = SearchView.class.getDeclaredField("mSearchButton");
    searchField.setAccessible(true);
    ImageView searchBtn = (ImageView)searchField.get(citySearch);
    searchBtn.setImageResource(R.drawable.search_icon);
    searchBtn.setScaleType(ScaleType.FIT_CENTER);
    searchPlate.setBackgroundResource(R.drawable.search_background);
}
catch (NoSuchFieldException e)
{
    Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
catch (IllegalAccessException e)
{
    Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
Run Code Online (Sandbox Code Playgroud)

android searchview android-search android-styles

18
推荐指数
2
解决办法
7515
查看次数

搜索小部件调用OnNewIntent两次

我有一个我想搜索的活动.当我点击搜索时,OnNewIntent它会被调用两次......我做错了什么?

我正在创建像这样的Searchview

public override bool OnCreateOptionsMenu(IMenu menu) 
{

    searchView = new SearchView(this);
    var searchManager = (SearchManager)GetSystemService(Context.SearchService);
    var searchableInfo = searchManager.GetSearchableInfo(ComponentName);

    searchView.SetSearchableInfo(searchableInfo);
    var search_item = menu.Add(new Java.Lang.String("Search"));
    search_item.SetActionView(searchView);
    search_item.SetShowAsAction(ShowAsAction.IfRoom);        

    var edit = menu.Add(0, insertItemID, 0, "Insert");
    edit.SetShowAsAction(ShowAsAction.IfRoom);
    edit.SetIcon(Android.Resource.Drawable.IcMenuAdd);

    return base.OnCreateOptionsMenu(menu); 
}
Run Code Online (Sandbox Code Playgroud)

日志:

10-17 07:45:45.491 I/ActivityManager(  900): START {act=android.intent.action.SEARCH flg=0x10000000 cmp=Intranet.Intranet/intranet.screens.ContactListActivity (has extras)} from pid 2971
10-17 07:45:47.562 W/EGL_emulation( 2971): eglSurfaceAttrib not implemented
10-17 07:45:47.562 I/ActivityManager(  900): START {act=android.intent.action.SEARCH flg=0x10000000 cmp=Intranet.Intranet/intranet.screens.ContactListActivity (has extras)} from pid 2971
10-17 07:45:48.472 D/OpenGLRenderer( 2971): …
Run Code Online (Sandbox Code Playgroud)

android xamarin.android android-search

15
推荐指数
2
解决办法
2314
查看次数

如何在搜索时删除android searchview弹出文本?

我已经实现了动作栏SearchView,它工作正常,但在屏幕的底部显示了一个浮动文本弹出窗口.看截图:

短屏幕

ListView Java类:

@Override
    public boolean onQueryTextChange(String newText) {

        if (TextUtils.isEmpty(newText)) {
            mListView.clearTextFilter();
        } else {

            // EventAdapterView ca = (EventAdapterView)mListView.getAdapter();
            // ca.getFilter().filter(newText.toString());

            // Filter lFilter = mDataAdapter.getFilter();
            // lFilter.filter("");
            // following line was causing the ugly popup window.
            mListView.setFilterText(newText.toString());

            // EventAdapterView ca = (EventAdapterView)mListView.getAdapter();
            // ca.getFilter().filter(newText.toString());

        }

        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

适配器类

@Override
    public Filter getFilter() {
        /**
         * A filter object which will filter message key
         * */
        Filter filter …
Run Code Online (Sandbox Code Playgroud)

search android android-listview searchview android-search

15
推荐指数
1
解决办法
5798
查看次数