SearchView要素には、テキストの色を変更するためのプロパティがありません。デフォルトのテキストの色は黒で、暗い背景では機能しません。ハッキングに頼らずにテキストの色を変更する方法はありますか?
テキストサイズの変更に関連する同様の質問を見つけましたが、これまでのところ、答えがありません。 SearchView TextSizeの設定方法
追加
<item name="Android:editTextColor">@Android:color/white</item>
親テーマに変更すると、入力したテキストが変更されます。使用することもできます
<item name="Android:textColorHint">@Android:color/white</item>
searchViewのヒントテキストを変更します。 (@Android:color/white
を使用したい適切な値に置き換えることができることに注意してください)
次のようなものを試してください。sdkからtextviewへのハンドルを取得し、公開しないので変更します。
int id = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
これは私のために動作します。
SearchView searchView = (SearchView) findViewById(R.id.search);
EditText searchEditText = (EditText) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));
似たようなことをしたかった。 TextView
の子の中からSearchView
を見つけなければなりませんでした。
for (TextView textView : findChildrenByClass(searchView, TextView.class)) {
textView.setTextColor(Color.WHITE);
}
Utilメソッドが必要な場合:
public static <V extends View> Collection<V> findChildrenByClass(ViewGroup viewGroup, Class<V> clazz) {
return gatherChildrenByClass(viewGroup, clazz, new ArrayList<V>());
}
private static <V extends View> Collection<V> gatherChildrenByClass(ViewGroup viewGroup, Class<V> clazz, Collection<V> childrenFound) {
for (int i = 0; i < viewGroup.getChildCount(); i++)
{
final View child = viewGroup.getChildAt(i);
if (clazz.isAssignableFrom(child.getClass())) {
childrenFound.add((V)child);
}
if (child instanceof ViewGroup) {
gatherChildrenByClass((ViewGroup) child, clazz, childrenFound);
}
}
return childrenFound;
}
これは、カスタムスタイルを使用して実現するのが最適です。アクションバーウィジェットスタイルを独自のカスタムスタイルでオーバーロードします。暗いアクションバーを持つホロライトの場合、res/values/styles_mytheme.xml
などの独自のスタイルファイルにこれを配置します。
<style name="Theme.MyTheme" parent="@Android:style/Theme.Holo.Light.DarkActionBar">
<item name="Android:actionBarWidgetTheme">@style/Theme.MyTheme.Widget</item>
<!-- your other custom styles -->
</style>
<style name="Theme.MyTheme.Widget" parent="@Android:style/Theme.Holo">
<item name="Android:textColorHint">@Android:color/white</item>
<!-- your other custom widget styles -->
</style>
ここにリンクの説明を入力してください で説明されているように、アプリケーションがテーマのカスタムテーマを使用していることを確認してください
そのためには、スタイルにeditTextColor
属性を設定します。
<style name="SearchViewStyle" parent="Some.Relevant.Parent">
<item name="Android:editTextColor">@color/some_color</item>
</style>
このスタイルをレイアウトのToolbar
またはSearchView
に適用します。
<Android.support.v7.widget.Toolbar
Android:theme="@style/SearchViewStyle">
<Android.support.v7.widget.SearchView />
</Android.support.v7.widget.Toolbar>
私にとっては、次の作品。リンクのコードを使用しました: サポートライブラリを使用してアクションバーの検索ヒントのテキストの色を変更する 。
searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
EditText txtSearch = ((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text));
txtSearch.setHint(getResources().getString(R.string.search_hint));
txtSearch.setHintTextColor(Color.LTGRAY);
txtSearch.setTextColor(Color.WHITE);
アクションバーの検索ビューのヒントテキストの色を変更する 別の解決策をアドバイスします。動作しますが、ヒントテキストと色のみを設定します。
searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>"));
Android.support.v7.widget.SearchViewを使用している場合、リフレクションを使用しなくても可能です。
私のアプリでのやり方は次のとおりです。
EditText text = (EditText) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(Android.support.v7.appcompat.R.id.search_close_btn);
View searchPlate = searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
if (searchPlate != null) {
searchPlate.setBackgroundResource(R.drawable.search_background);
}
if (text != null){
text.setTextColor(resources.getColor(R.color.white));
text.setHintTextColor(getResources().getColor(R.color.white));
SpannableStringBuilder magHint = new SpannableStringBuilder(" ");
magHint.append(resources.getString(R.string.search));
Drawable searchIcon = getResources().getDrawable(R.drawable.ic_action_view_search);
int textSize = (int) (text.getTextSize() * 1.5);
searchIcon.setBounds(0, 0, textSize, textSize);
magHint.setSpan(new ImageSpan(searchIcon), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// Set the new hint text
text.setHint(magHint);
}
if (searchCloseIcon != null){
searchCloseIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_close));
}
Appcompat以外のSearchViewのIDは公開されていませんが、どこを見るべきかわかっている場合はAppCompatのIDを公開します。 :)
使用する場合-Android.support.v7.widget.SearchView
SearchView searchView = (SearchView) item.getActionView();
EditText editText = (EditText) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
editText.setTextColor(Color.WHITE);
Toolbar
のスタイルを作成します
<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="Android:editTextColor">@color/some_color</item>
</style>
Toolbar
のテーマとして設定します
<Android.support.v7.widget.Toolbar
Android:theme="@style/AppTheme.Toolbar"
...
私はこの問題を抱えていましたが、これは私にとってはうまくいきます。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.customer_menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_customer_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(this);
//Applies white color on searchview text
int id = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
return true;
}
はい、次の方法で可能です。
public static EditText setHintEditText(EditText argEditText, String argHintMessage, boolean argIsRequire) {
try {
if (argIsRequire) {
argHintMessage = " " + argHintMessage;
//String text = "<font color=#8c8c8c>"+argHintMessage+"</font> <font color=#cc0029>*</font>";
String text = "<font color=#8c8c8c>" + argHintMessage + "</font>";
argEditText.setHint(Html.fromHtml(text));
} else {
argEditText.setHint(argHintMessage);
}
} catch (Exception e) {
e.printStackTrace();
}
return argEditText;
}
このメソッドの呼び出しは次のようになります。
metLoginUserName=(EditText)this.findViewById(R.id.etLoginUserName);
metLoginPassword=(EditText)this.findViewById(R.id.etLoginPassword);
/**Set the hint in username and password edittext*/
metLoginUserName=HotSpotStaticMethod.setHintEditText(metLoginUserName, getString(R.string.hint_username),true);
metLoginPassword=HotSpotStaticMethod.setHintEditText(metLoginPassword, getString(R.string.hint_password),true);
それを使用して、この方法を使用して、ヒントに赤い色*マークを追加しました。要件に応じてこの方法を変更する必要があります。お役に立てば幸いです.... :)
最もクリーンな方法は次のとおりです。
ツールバーはテーマThemeOverlay.AppCompat.Dark.Actionbarを使用します。
子を次のようにします:
toolbarStyle親 "ThemeOverlay.AppCompat.Dark.Actionbar"
このスタイルでこのアイテムを追加します
アイテム名「Android:editTextColor」> yourcolor
できた.
もう1つの非常に重要なことは、ツールバーにlayout_height = "?attr/actionbarSize"を配置することです。デフォルトではwrap_contentです。私にとって、テキストはsearchviewでも表示されず、この問題を修正しました。
これは私のために働いています。
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(this);
searchEditText = (EditText) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
{
searchEditText.setBackgroundColor(getResources().getColor(R.color.c_trasnparent));
searchEditText.setGravity(Gravity.CENTER);
searchEditText.setCompoundDrawables(null,null,R.drawable.ic_cross,null);
}
これを使用してください、それは正しいです。 :D
AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
searchText.setHintTextColor(getResources().getColor(color.black));
searchText.setTextColor(getResources().getColor(color.black));
ホロテーマに基づいてアプリのテーマを作成すると、SearchViewに黒のテキストではなく白のテキストが表示されます
<style name="Theme.MyTheme" parent="Android:Theme.Holo">
ダーティハックを使わずにサーチビューのテキストカラーを変更する他の方法を見つけませんでした。
入力したテキストの色を変更します。
((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("Android:id/search_src_text", null, null))).setTextColor(Color.WHITE);
ヒントテキストの色を変更します。
((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("Android:id/search_src_text", null, null))).setHintTextColor(Color.LTGRAY);
はい、できます
SearchView searchView = (SearchView) findViewById(R.id.sv_symbol);
SearchView Textに白色を適用するには、
int id = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
ハッピーコーディング!!!!
searchViewを備えたappcompat-v7ツールバー(MenuItemCompatで提供):
ツールバーのテーマを@ style/ThemeOverlay.AppCompat.Lightに設定すると、ヒントテキストと入力されたテキストに暗い色(黒)が生成されますが、カーソル*の色には影響しません。したがって、ツールバーのテーマを@ style/ThemeOverlay.AppCompat.Darkに設定すると、ヒントテキストと入力されたテキストの色が明るい(白)になり、カーソル*はとにかく白になります。
上記のテーマのカスタマイズ:
Android:textColorPrimary->入力したテキストの色
editTextColor->入力されたテキストの色(設定されている場合、Android:textColorPrimaryの影響をオーバーライドします)
Android:textColorHint->ヒントの色
*注:(反射ソリューションを使用せずに)カーソルの色を制御する方法をまだ決定していません。
SearchView
オブジェクトはLinearLayout
から拡張されるため、他のビューを保持します。ヒントは、ヒントテキストを保持しているビューを見つけて、プログラムで色を変更することです。 IDでビューを検索しようとすると、IDはアプリケーションで使用されるテーマに依存するという問題があります。そのため、使用するテーマに応じて、findViewById(int id)
メソッドはnull
を返す場合があります。すべてのテーマで機能するより良いアプローチは、ビュー階層を走査して、ヒントテキストを含むウィジェットを見つけることです。
// get your SearchView with its id
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
// traverse the view to the widget containing the hint text
LinearLayout ll = (LinearLayout)searchView.getChildAt(0);
LinearLayout ll2 = (LinearLayout)ll.getChildAt(2);
LinearLayout ll3 = (LinearLayout)ll2.getChildAt(1);
SearchView.SearchAutoComplete autoComplete = (SearchView.SearchAutoComplete)ll3.getChildAt(0);
// set the hint text color
autoComplete.setHintTextColor(getResources().getColor(Color.WHITE));
// set the text color
autoComplete.setTextColor(Color.BLUE);
このメソッドを使用すると、検索クエリを保持するSearchView
など、EditText
階層内の他のウィジェットの外観を変更することもできます。 GoogleがSearchView
のビュー階層をすぐに変更することを決定しない限り、しばらくの間、このメソッドでウィジェットの外観を変更できるはずです。
Appcompat v7ライブラリを使用してsearchviewをカスタマイズすることができます。appcompatv7ライブラリを使用し、そのカスタムスタイルを定義しました。描画可能なフォルダに、次のようなbottom_border.xmlファイルを配置します。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape >
<solid Android:color="@color/blue_color" />
</shape>
</item>
<item Android:bottom="0.8dp"
Android:left="0.8dp"
Android:right="0.8dp">
<shape >
<solid Android:color="@color/background_color" />
</shape>
</item>
<!-- draw another block to cut-off the left and right bars -->
<item Android:bottom="2.0dp">
<shape >
<solid Android:color="@color/main_accent" />
</shape>
</item>
</layer-list>
値フォルダーstyles_myactionbartheme.xmlで:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppnewTheme" parent="Theme.AppCompat.Light">
<item name="Android:windowBackground">@color/background</item>
<item name="Android:actionBarStyle">@style/ActionBar</item>
<item name="Android:actionBarWidgetTheme">@style/ActionBarWidget</item>
</style>
<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="Android:background">@color/main_accent</item>
<!-- <item name="Android:icon">@drawable/abc_ic_ab_back_holo_light</item> -->
</style>
<style name="ActionBarWidget" parent="Theme.AppCompat.Light">
<!-- SearchView customization-->
<!-- Changing the small search icon when the view is expanded -->
<!-- <item name="searchViewSearchIcon">@drawable/ic_action_search</item> -->
<!-- Changing the cross icon to erase typed text -->
<!-- <item name="searchViewCloseIcon">@drawable/ic_action_remove</item> -->
<!-- Styling the background of the text field, i.e. blue bracket -->
<item name="searchViewTextField">@drawable/bottom_border</item>
<!-- Styling the text view that displays the typed text query -->
<item name="searchViewAutoCompleteTextView">@style/AutoCompleteTextView</item>
</style>
<style name="AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView">
<item name="Android:textColor">@color/text_color</item>
<!-- <item name="Android:textCursorDrawable">@null</item> -->
<!-- <item name="Android:textColorHighlight">@color/search_view_selected_text</item> -->
</style>
</resources>
メニューを表示するためにcustommenu.xmlファイルを定義しました:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:com.example.actionbartheme="http://schemas.Android.com/apk/res-auto" >
<item Android:id="@+id/search"
Android:title="@string/search_title"
Android:icon="@drawable/search_buttonn"
com.example.actionbartheme:showAsAction="ifRoom|collapseActionView"
com.example.actionbartheme:actionViewClass="Android.support.v7.widget.SearchView"/>
</menu>
アクティビティは、ActivityではなくActionBarActivityを拡張する必要があります。これがonCreateOptionsMenuメソッドです。
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.custommenu, menu);
}
マニフェストファイル内:
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppnewTheme" >
詳細については、次のURLを参照してください。
こちら http://www.jayway.com/2014/06/02/Android-theming-the-actionbar/
ワオ。たくさんの答え。原色から色の値を取得します。
それを変更すれば、完了です!
@Override
public void onResume() {
super.onResume();
getActivity().setTheme(R.style.YourTheme_Searching);
}
スタイル;
<style name="YourTheme.Searching" parent="YourTheme">
<item name="Android:textColorPrimary">@Android:color/white</item>
</style>
これを使用することで、検索ビューで入力した色のテキストを変更できました
AutoCompleteTextView typed_text = (AutoCompleteTextView) inputSearch.findViewById(inputSearch.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null));
typed_text.setTextColor(Color.WHITE);
TextView textView = (TextView) searchView.findViewById(R.id.search_src_text);
textView.setTextColor(Color.BLACK);
私のために働いたもの
((EditText)searchView.findViewById(R.id.search_src_text)).setTextColor(getResources().getColor(R.color.text));
ブログの投稿から解決策を見つけました。 here を参照してください。
基本的に、searchViewAutoCompleteTextViewのスタイルを設定し、Android:actionBarWidgetThemeにスタイルを継承させます。
searchView = (SearchView) view.findViewById(R.id.searchView);
SearchView.SearchAutoComplete searchText = (SearchView.SearchAutoComplete) searchView
.findViewById(org.holoeverywhere.R.id.search_src_text);
searchText.setTextColor(Color.BLACK);
Holoeverywhere Libraryを使用しています。 org.holoeverywhere.R.id.search_src_textに注意してください
それは私と一緒に動作します
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem searchItem = menu.findItem(R.id.action_search);
EditText searchEditText = (EditText) searchView.getActionView().findViewById(Android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));
return super.onPrepareOptionsMenu(menu);
}