我正在尝试使用带有操作栏sherlock的SearchView支持v4版本.
所以我在操作栏中有我的搜索按钮 - >当我触摸它时键盘显示和搜索栏也是如此.
我的问题是我需要使用侦听器onQueryTextSubmit和onQueryTextChange但它们永远不会被触发.我需要使用searh查询字符串并使用它做自定义的东西.
这是完整的activity.java
public class ActivityMain extends SherlockFragmentActivity implements OnQueryTextListener, DialogFragmentListener {
/**
* PRIVATE ATTRIBUTES
*/
private static final String TAG = "ActivityMain";
private ViewPager _viewPager;
private TabsAdapter _tabsAdapter;
private DialogFiltre _dialogFiltre;
private String _searchCurrentQuery;
// data
private boolean _doubleBackToExitPressedOnce = false;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
switch ((int) _viewPager.getCurrentItem()) {
case 0:
getSupportMenuInflater().inflate(R.menu.empty_menu, menu);
break;
case 1:
getSupportMenuInflater().inflate(R.menu.action_bar_menu, menu);
break;
case 2:
getSupportMenuInflater().inflate(R.menu.empty_menu, menu);
break;
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu …Run Code Online (Sandbox Code Playgroud) 我在SherlockListActivity中将Action功能添加到Action Bar但是,当我尝试实例化SearchView时,它始终为null:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.activity_main_menu, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.activity_main_menu_search).getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
public boolean onQueryTextSubmit(String p1){
List<Application> auxList = Search.search(mContext, p1);
AdapterApp aux = new AdapterApp(mContext, auxList);
setListAdapter(aux);
getListView().setOnItemClickListener(aux.getItemClickListener());
return true;
}
public boolean onQueryTextChange(String p1){
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
activity_main_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/activity_main_menu_search"
android:title="@string/search"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="com.actionbarsherlock.widget.SearchView " />
<item android:id="@+id/activity_main_menu_purchase"
android:title="@string/purchase"
android:icon="@drawable/ic_launcher_market_holo"
android:showAsAction="ifRoom|collapseActionView" />
</menu>
Run Code Online (Sandbox Code Playgroud)
另外我要说我已正确导入所需的类:
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
import com.actionbarsherlock.app.SherlockListActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem; …Run Code Online (Sandbox Code Playgroud) 我创建了一个MenuActivity,它有一个Action Bar和一个Split Action Bar.我想对我的应用程序中的所有活动使用此操作栏和splitactionbar视图.我是android的新手,所以有人可以逐步指导我.
此外,我试图将搜索图标放在动作栏上,该动作栏现在出现在SplitActionBar上.我在SplitActionBar上有四个图标,我想在操作栏上显示不在SplitActionBar上的搜索图标.搜索图标是一个SearchView项目,单击该项目会在ActionBar上展开,这非常不整洁.我希望它出现在ActionBar的最右边位置,并在单击时展开.
这是MenuACtivity.java:
package com.example.travelplanner;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import com.example.travelplanner.R;
public class MenuActivity extends Activity implements OnItemClickListener{
Timer t1;
TimerTask tt1;
ImageView slide;
int currindex = 0;
ActionBar actionBar;
ArrayList<ItemDetails> image_details = …Run Code Online (Sandbox Code Playgroud) 基本上我希望searachview扩展和折叠,当后面有一个图像按钮时,当点击图标时它应该消失,当searchview崩溃时应该出现视图.
我正在使用搜索视图而不是在操作栏中.当我点击搜索图标时,它只扩展了一半的屏幕,但是它应该扩展完整的宽度,但是当我关闭搜索视图时应该是wrap_content.
<SearchView
android:id="@+id/searchView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true">
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
android.view.ViewGroup.LayoutParams params = searchview.getLayoutParams();
params.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
Run Code Online (Sandbox Code Playgroud)
但我在这里得到错误setLayoutParams它说"添加到演员"
我有一个问题:我有listView一个Fragment,我实现了一个搜索查看(的actionView)来过滤列表listView与搜索查看onQueryTextChange事件.我在这部分没有问题,一切正常.
adapter = new ListaEmpleadosAdapter(getActivity(), empleadoItems, context);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_buscar).getActionView();
SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
try {
adapter.getFilter().filter(s);
adapter.notifyDataSetChanged();
} catch (Exception e) {
System.err.println("ERROR FragmentEmpleado -> " + e.toString());
}
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
当我第一次搜索并按下后退按钮时,软键盘关闭.这很正常.当我再次按下后退按钮时,searchView关闭,这是正常的,但列表不会返回初始项目.
当searchView被折叠(因为searchView.setOnCloseListener不起作用)以恢复初始列表项时,如何获取事件?或者以任何方式恢复删除适配器过滤器的初始列表项...
历史:



非常感谢!
我已经浏览了Android开发者网站上的搜索界面教程并成功实施了.
我唯一无法实现的是点击搜索菜单更改操作栏背景并单击"返回"按钮将其还原?
以下是Gmail应用的截图.正常的操作栏看起来像这样.

当您单击"搜索"菜单时,它会更改为如下所示,而不会更改活动.

我想实现这个功能.请帮忙.谢谢.

如何删除或更改edittext中的搜索视图图标?我正在使用Appcompat库.
我使用下面的代码来修改和删除但它不起作用:
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
View search_mag_icon = (View)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
search_mag_icon.setBackgroundResource(R.drawable.ic_stub);
//search_mag_icon.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud) 单击"搜索"菜单项时,从顶部的SearchView下来,占用工具栏的整个空间:

我找到了一些实现这个的库: Eugene Horan的Android Material SearchView 和krishnakapil的MaterialSearchView.但它们与WhatsApp不同.
这个问题可能看起来很奇怪,我找不到怎么做的方法.所以我的问题是如何实现WhatsApp之类的材料设计SearchView来自顶级?
如何在searchview中更改黑色箭头(后退按钮)的颜色我尝试使用下面的代码进行自定义
ImageView backid = (ImageView) searchViewAndroidActionBar.findViewById(R.id.search_button);
backid.setColorFilter(ContextCompat.getColor(Shopping_CategoriesCommon.this, R.color.white), PorterDuff.Mode.SRC_IN);
backid.setImageResource(R.drawable.search);
Run Code Online (Sandbox Code Playgroud)
但它不起作用
我想在我的搜索视图中为用户创建提示,但是在用户按下放大镜图标之前,提示不可见.即使用户没有像编辑文本那样点击任何内容,有没有办法显示提示?此外,我希望搜索视图的边框可见而不仅仅是图标,有没有办法实现它?提前致谢.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/header_image_id"
android:orientation="vertical"
android:layoutDirection="rtl">
<TextView
android:id="@+id/text_view_id"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textAlignment="center"
android:text="Enter your search request here?"/>
<SearchView
android:id="@+id/search_view_id"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:queryHint="This is a hint" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) android ×10
searchview ×10
java ×1
layoutparams ×1
list ×1
listview ×1
menu ×1
searchable ×1
whatsapp ×1