29

Android のドキュメントでは、アプリのロゴが定義されている場合はどこでも使用されると説明されています。しかし、検索ビューが展開されると、アプリのロゴの代わりにアプリのアイコンが使用され、検索ビューが展開された状態のときにアプリのロゴを表示する方法が見つかりません。

関連パーツはこちら。

マニフェスト ファイル

<application
    android:name="MyApp"
    android:allowBackup="true"
    android:icon="@drawable/app_icon"
    android:label="@string/app_name"
    android:logo="@drawable/app_logo"
    android:theme="@style/Theme.MyTheme" >

searchable.xml (アイコンを設定しても何も変わらない)

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:icon="@drawable/app_logo"
    android:label="@string/app_name"
    android:hint="@string/search_hint" >
</searchable>

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_search"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        android:icon="@drawable/ic_search"
        android:showAsAction="always|collapseActionView" />

活動コード

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
menu.findItem(R.id.menu_search).setActionView(searchView);

注: ABS SearchView を使用していますが、デフォルトの SearchView に切り替えると同じことが起こります。

編集:わかりやすくするためにスクリーンショットをいくつか追加しました。

ここでは、アプリのロゴに星の画像、アプリのアイコンに Android の画像を使用しました。最初のスクリーンショットは、アクティビティのデフォルト ビューです。2 つ目は、検索ボタンをクリックしたときのビューです。星の画像であると期待しているのに、Androidの画像が表示されます。

ここに画像の説明を入力

ここに画像の説明を入力

4

9 に答える 9

20

ロゴ ドローアブルをアイコンとして設定します。テーマ属性経由

<item name="android:icon">@drawable/ab_logo</item>

またはコードで

getSupportActionBar().setIcon(R.drawable.ab_logo); 
于 2013-05-15T21:27:57.163 に答える
10

menu.xml で宣言したまったく異なる SearchView を使用しています。

このコードでは、新しい SearchView を作成しますが、これは必要なものではありません。

SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());

このようなメニューを作成してみてください。

this.getSupportMenuInflater().inflate(R.menu.menu, menu);
final SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchableInfo info = searchManager.getSearchableInfo(getComponentName());
final MenuItem searchItem = menu.findItem(R.id.menu_search);
final SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setSearchableInfo(info);

また、ActionBar については、setDisplayUseLogoEnabled(true) などの代わりに、すべてのオプションを一度に設定してみてください。

final ActionBar bar = getSupportActionBar();
bar.setDisplayOptions(
        ActionBar.DISPLAY_SHOW_TITLE |
        ActionBar.DISPLAY_USE_LOGO |
        ActionBar.DISPLAY_SHOW_HOME |
        ActionBar.DISPLAY_HOME_AS_UP);

これは私が現在のプロジェクトで使用している設定であり、このような問題を経験したことはありません.

于 2013-05-20T12:59:20.793 に答える
5

この単純なロジックで解決策を達成しました:

public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
        case R.id.menu_search:
            getActionBar().setIcon(R.drawable.your_logo);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
于 2013-11-11T08:38:35.220 に答える
3

メニュー Xml から collapseActionView を削除するだけです。

于 2013-05-24T19:34:20.830 に答える
2

アイコンをロゴに置き換えるには、マニフェスト ファイルでアプリのロゴをandroid:logo属性で指定してから、アクティビティを呼び出しsetDisplayUseLogoEnabled(true)ます。

このドキュメント を参照してください1ドキュメント2

詳細については、この回答を参照してください

于 2013-05-14T13:12:40.047 に答える
0

この問題を解決する最善の方法は、SearchView を次のようにプログラムでメニューに追加することであることがわかりました。

    SearchView searchView = new SearchView(getActionBar().getThemedContext());
    menu.add("Search")
            .setIcon(R.drawable.ic_action_search)
            .setActionView(searchView)
            .setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
                @Override
                public boolean onMenuItemActionExpand(MenuItem item) {
                    getActionBar().setIcon(R.drawable.ic_action_willyweather);

                    return true;
                }

                @Override
                public boolean onMenuItemActionCollapse(MenuItem item) {
                    return true;
                }
            })
            .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM);

次に、onActionExpandListener を使用して、SearchView が展開されたときにアイコン/ロゴを正しい値に変更します。

このソリューションは、menu.xml で SearchView を定義する場合にも機能する可能性がありますが、上記の例と同じことを行うには、コードで onActionExpandListener() をセットアップする必要があります。

アンディ。

于 2014-01-08T11:30:28.943 に答える