---問題を解決しました-編集テキストに回答を追加しました---
私はAndroid App。でActionBar
Sherlockを使用しています。そこにSearchView
を表示したいです。 mカスタマイズしようとして何か間違ったことをしている。
この方法で作成します:
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);
私は2つのことをしたいです:
表示されるテキストフィールドに表示される「検索」というテキストの色を変更します。私はテーマの全体的なテキストスタイルでそれを変更したように見えますが、どういうわけか別の色を設定できることを望みます。
この検索ビューを開くと、アクションバーの左側に表示されます。しかし、右側にそれが必要です。アイコン(拡大鏡)は実際にはバーの右側にありますが、それを押すと左側にEditTextfieldが開きます。 LayoutParamsを使用しようとしましたが、LayoutParamsを使用してアクションバーに追加しようとしたときに不可欠なものがありません。
だから、誰かが私を助けてくれることを願っています。
ありがとう、トビアス
----編集----
さて、これでもう一つのことが解決されました。 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);
そして、私の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" />
したがって、少なくとも1つの謎が解決されました(なぜこれが違いを生んだのか)。しかし、新しく作成されたXMLは、呼び出し時にもう閉じません
searchMenuItem.collapseActionView();
そのため、まだ何か問題があります。
--- EDIT 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));
最後の問題は、テキストを送信するときにSearchViewが閉じないことです。したがって、collapseActionView()などは機能しません。何か案は?
--- EDIT 3 ---
さて、解決策を見つけました。これが正しい方法かどうかはわかりませんが、
((SearchView) searchMenuItem.getActionView()).setIconified(true);
EditText
を閉じます
1回目は入力テキストを「削除」して「ヒント」のみを表示するのに対し、2回目はHint EditTextを「閉じ」てsearchViewを拡大鏡に折りたたむため、2回行う必要があります。不器用なスタイルですが動作します。 :-)
クラス 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);
FYIでActionBarがサポートされるようになりましたv7は、クエリヒントの色、テキストの色、テキストのサイズを変更する方法をサポートしています。
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);
}
このようにEdit Textの角を丸くしました。
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);
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>
<SearchView
Android:id="@+id/searchView"
Android:layout_width="match_parent"
Android:queryHint="Serach"
Android:layout_height="match_parent"></SearchView>
番号2の質問を解決するには
この行を変更します。
_.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
_
に:
_.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
_
setShowAsAction()
メソッドで_SHOW_AS_ACTION_IF_ROOM
_パラメーターのみを使用する