アクションバー内に検索ウィジェットがあります。 Android:hint値を設定しましたが、検索アイコンをクリックしても表示されません。
関連ファイル:
MainActivity.Java
package com.example.myApp;
import Android.os.Bundle;
import Android.app.ActionBar;
import Android.app.Activity;
import Android.app.SearchManager;
import Android.content.Context;
import Android.view.Menu;
import Android.widget.SearchView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//creates an action bar.
ActionBar actionBar = getActionBar();
//sets the homebutton.
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return true;
}
}
Main.xml => res/menu/Main.xml
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:id="@+id/search"
Android:title="@string/search_title"
Android:icon="@drawable/ic_search"
Android:showAsAction="collapseActionView|ifRoom"
Android:actionViewClass="Android.widget.SearchView"
/>
</menu>
searchable.xml => res/XML/searchable.XMl
<?xml version="1.0" encoding="UTF-8"?>
<searchable xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:label="@string/app_name"
Android:hint="search"
Android:textColorHint= "#FF0000"
/>
Mainfest.XMl
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.MyApp"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="11"
Android:targetSdkVersion="17" />
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.example.MyApp.MainActivity"
Android:label="@string/app_name" >
<meta-data Android:name="Android.app.searchable"
Android:resource="@xml/searchable" />
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
私の試み:
アクションバーの背景が黒なので、ヒントテキストの色も黒なので、最初は:hint値が表示されないと思いました。ただし、hintTextColorを変更しても、ヒント値が表示されません。
何か案は?
ありがとう。
何らかの理由で、タグ内に<action Android:name="Android.intent.action.SEARCH"/>
を入れる必要があります。それが私にとって問題を解決したものです。ただし、この順序に注意してください
<intent-filter>
<action Android:name="Android.intent.action.SEARCH"/>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
そうしないと、アクティビティがランチャーとして認識されません
まだ誰も私の質問に答えることができませんでした...
.Javaファイルでヒント値を変更する方法を見つけましたが、。xmlファイルでは変更していません。
_MainActivity.Java
_のonCreateOptionsMenu(Menu menu)
メソッド内で、次のことができます。
_searchView.setQueryHint("HINT TEXT...");
_
単純なEditText
のように、XMLでSearchWidgetのヒント値を事前設定できるはずだと思います。
ヒント属性の文字列リソースを提供する必要があります。ハードコードされたテキストは機能しません。の代わりに
Android:hint="search"
文字列リソースを使用する
Android:hint="@string/search_hint"
ドキュメントはそれについて明確です: http://developer.Android.com/guide/topics/search/searchable-config.html
Android:hint="string resource"
解決策にスキップしたい場合は、下にスクロールしてください
これはSearchView
のバグのようです。
編集:私はこのバグを報告しました ここ 。編集2:将来のリリースで修正されるようです。 ここ を参照してください。
コンストラクターでは、フィールドmQueryHint
に値を割り当てます。
public SearchView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
...
final CharSequence queryHint = a.getText(R.styleable.SearchView_queryHint);
if (!TextUtils.isEmpty(queryHint)) {
setQueryHint(queryHint);
}
...
}
public void setQueryHint(CharSequence hint) {
mQueryHint = hint;
updateQueryHint();
}
後で、SearchableInfo
(ヒントを読み取る必要のあるオブジェクト)を設定すると、次のようになります。
public void setSearchableInfo(SearchableInfo searchable) {
mSearchable = searchable;
if (mSearchable != null) {
...
updateQueryHint();
}
...
}
今まではすべて大丈夫のようです。 searchableInfo
をmSearchable
というフィールドに保存します。 updateQueryHint
の機能を見てみましょう。
private void updateQueryHint() {
if (mQueryHint != null) {
mSearchSrcTextView.setHint(getDecoratedHint(mQueryHint));
} else if (IS_AT_LEAST_FROYO && mSearchable != null) {
CharSequence hint = null;
int hintId = mSearchable.getHintId();
if (hintId != 0) {
hint = getContext().getString(hintId);
}
if (hint != null) {
mSearchSrcTextView.setHint(getDecoratedHint(hint));
}
} else {
mSearchSrcTextView.setHint(getDecoratedHint(""));
}
}
何?したがって、mQueryHint
にすでに値がある場合、検索可能な情報を読み取ることすらできませんか? mQueryHint
がSearchViewコンストラクターのデフォルト値に割り当てられているため(上記を参照)、ヒントが表示されないのはこのためです。
では、このバグをどのように回避するのでしょうか。
2つのオプション:
例:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the options menu from XML
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.your_menu, menu);
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(this);
// Assumes current activity is the searchable activity
SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName());
searchView.setSearchableInfo(searchableInfo);
// Override the hint with whatever you like
searchView.setQueryHint(getResources().getString(R.strings.your_hint));
return true;
}
例:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the options menu from XML
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.your_menu, menu);
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(this);
// Assumes current activity is the searchable activity
SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName());
// DO THIS BEFORE setSearchableInfo !!!
searchView.setQueryHint(null);
searchView.setSearchableInfo(searchableInfo);
return true;
}
どちらもappcompatv7での動作を確認しました。
使用できます
Android:queryHint="Hint text"
xMLの検索ウィジェットで。
受け入れられた回答は確かに機能しますが、MAINアクティビティに対してのみ機能します。別のアクティビティで使用したい場合は機能しません。
以下のコードは Android開発者サイト から取られています
<activity
Android:name="com.example.Activities.MainActivity"
Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.SEARCH" />
</intent-filter>
<meta-data
Android:name="Android.app.searchable"
Android:resource="@xml/searchable"/>
</activity>