Tob*_*ich 44 customization android actionbarsherlock searchview
---解决了问题 - 在编辑文本中添加了答案---
我ActionBar
在我的Android应用程序中使用了Sherlock.在那里,我想展示一个SearchView
.它到目前为止工作正常,但我意识到,我在尝试自定义时做错了.
我这样创建它:
searchView.setQueryHint("Search: ");
searchView.setOnQueryTextListener(this);
searchView.setOnCloseListener(...);
searchMenuItem = menu.add("Search place");
searchMenuItem.setIcon(R.drawable.ic_action_search)
.setActionView(searchView)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
Run Code Online (Sandbox Code Playgroud)
我想做两件事:
更改显示在文本字段中的文本"搜索"的颜色.看起来我用我的主题中的整体文字样式改变了它,但我希望我能以某种方式设置单独的颜色.
打开此搜索视图时,它将显示在操作栏的左侧.但我需要在右侧.图标(放大镜)实际上位于条形图的右侧,但按下它会打开左侧的EditTextfield.我尝试使用LayoutParams但是在尝试使用LayoutParams将其添加到Action Bar时,我遗漏了一些必要的东西.
所以希望有人可以帮助我.
谢谢你,托比亚斯
----编辑----
好的,所以有一件事已经解决了.通过XML添加ActionBar使TextEdit向右.
getSupportMenuInflater().inflate(R.menu.activity_main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
Log.e(TAG, "searchView: " + searchView);
Run Code Online (Sandbox Code Playgroud)
在我的menu.xml中
<item android:id="@+id/action_search"
android:title="Search"
android:icon="@drawable/ic_action_search"
android:showAsAction="always"
android:actionViewClass="com.actionbarsherlock.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)
所以至少有一个谜团解决了(为什么这会产生影响).但是新创建的XML在调用时不再关闭
searchMenuItem.collapseActionView();
Run Code Online (Sandbox Code Playgroud)
所以它仍然有问题.
---编辑2 ---
只是让你知道.我找到了文字颜色的解决方案.它可以通过使用SearchView的AutoCompleteTextView来实现:
AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
searchText.setHintTextColor(getResources().getColor(R.color.white));
searchText.setTextColor(getResources().getColor(R.color.white));
Run Code Online (Sandbox Code Playgroud)
所以我遇到的最后一个问题是SearchView在提交文本时不再关闭.所以collapseActionView()等不起作用.有任何想法吗?
---编辑3 ---
好的,我找到了解决方案.我不知道这是否是正确的方法,但在使用时
((SearchView) searchMenuItem.getActionView()).setIconified(true);
Run Code Online (Sandbox Code Playgroud)
它关闭了 EditText
我必须做两次,因为第一次只是"删除"我的输入文本并显示"提示",而第二次使用是"关闭"提示EditText并将searchView折叠到放大镜.笨拙的风格,但它的工作原理.:-)
ade*_*190 29
我做了一个类SearchViewFormatter来轻松地格式化本机SearchView android小部件.一个例子:
new SearchViewFormatter()
.setSearchBackGroundResource(R.drawable.my_bg)
.setSearchIconResource(R.drawable.my_ic, true, false) //true to icon inside edittext, false to outside
.setSearchVoiceIconResource(R.drawable.my_ic)
.setSearchTextColorResource(R.color.my_color)
.setSearchHintColorResource(R.color.my_color)
.setSearchCloseIconResource(R.drawable.my_ic)
.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS)
.format(mSearchView);
Run Code Online (Sandbox Code Playgroud)
prc*_*aen 15
仅供参考,现在使用ActionBar支持v7 appcompat更改查询提示颜色,文本颜色,文本大小的方式:
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.SearchAutoComplete;
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_home, menu);
MenuItem searchItem = menu.findItem(R.id.item_search);
mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
mSearchView.setOnQueryTextListener(this);
mSearchView.setQueryHint(getString(R.string.text));
SearchAutoComplete searchAutoComplete = (SearchAutoComplete) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchAutoComplete.setHintTextColor(mRes.getColor(android.R.color.white));
searchAutoComplete.setTextSize(14);
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
I did rounded corner for Edit Text like this.
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
View searchPlate = searchView.findViewById(searchPlateId);
searchPlate.setBackgroundResource(R.drawable.bg_white_rounded);
int searchSrcTextId = getResources().getIdentifier("android:id/search_src_text", null, null);
EditText searchEditText = (EditText) searchView.findViewById(searchSrcTextId);
searchEditText.setTextColor(Color.BLACK);
searchEditText.setHintTextColor(Color.LTGRAY);
int closeButtonId = searchView.getContext().getResources().getIdentifier("android:id/search_close_btn", null, null);
ImageView closeButtonImage = (ImageView) searchView.findViewById(closeButtonId);
closeButtonImage.setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN);
Run Code Online (Sandbox Code Playgroud)
bg_white_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff"/>
<corners android:radius="8dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
<SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:queryHint="Serach"
android:layout_height="match_parent"></SearchView>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80859 次 |
最近记录: |