AppCompat v21ライブラリを使用して、アプリのアクションバーとしてToolbar
を使用しています。=の this post Android Developers Blog。テキストが明るくなるように、_ThemeOverlay.AppCompat.Dark.ActionBar
_テーマを使用してアクションバーのスタイルを設定しました。ただし、アクションバーSearchView
's検索候補ポップアップは明るい背景に暗いテキストを表示し、この効果を達成することができませんでした。
アクションバーToolbar
のXMLは次のとおりです。
_<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/toolbar_actionbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
Android:elevation="@dimen/action_bar_elevation"
app:theme="@style/ActionBarThemeOverlay"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
_
アクションバーのテーマオーバーレイを拡張して、SearchView
のスタイルを設定しようとしました。
_<style name="ActionBarThemeOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="searchViewStyle">@style/Widget.AppCompat.Light.SearchView</item>
</style>
_
適切な手段として、この同じ要素をメインテーマに追加しました。
_<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="searchViewStyle">@style/Widget.AppCompat.Light.SearchView</item>
</style>
_
ただし、searchViewStyle
要素は効果がないようです。 SearchView
をここでスタイル設定するにはどうすればよいですか?
ソースコードを掘り下げて少し実験した後、解決策を思いつき、いくつかの混乱の原因を取り除きました。まず、アプリテーマでSearchView
スタイルを設定する必要があります。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="searchViewStyle">@style/MySearchViewStyle</item>
</style>
次に、suggestionRowLayout
にsearchViewStyle
を設定する必要があります。
<style name="MySearchViewStyle" parent="Widget.AppCompat.Light.SearchView">
<item name="suggestionRowLayout">@layout/search_suggestion_row</item>
</style>
私の質問では、@style/Widget.AppCompat.Light.SearchView
軽い提案メニューを取得しますが、そうではないことがわかります。独自のレイアウトを定義する必要があります。私はabc_search_dropdown_item_icons_2line.xml
AppCompat v21ライブラリから。
AppCompatは、Lollipopの更新されたSearchView APIを提供します。これは、はるかにカスタマイズおよびスタイル設定が可能です(拍手をキューに入れます)。古いsearchView *テーマ属性の代わりにLollipopスタイル構造を使用するようになりました。
SearchViewのスタイル設定方法は次のとおりです(values/themes.xml
):
<style name="Theme.MyTheme" parent="Theme.AppCompat">
<item name="searchViewStyle">@style/MySearchViewStyle</item>
</style>
<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
<!-- Background for the search query section (e.g. EditText) -->
<item name="queryBackground">...</item>
<!-- Background for the actions section (e.g. voice, submit) -->
<item name="submitBackground">...</item>
<!-- Close button icon -->
<item name="closeIcon">...</item>
<!-- Search button icon -->
<item name="searchIcon">...</item>
<!-- Go/commit button icon -->
<item name="goIcon">...</item>
<!-- Voice search button icon -->
<item name="voiceIcon">...</item>
<!-- Commit icon shown in the query suggestion row -->
<item name="commitIcon">...</item>
<!-- Layout for query suggestion rows -->
<item name="suggestionRowLayout">...</item>
</style>
このブログ投稿 でさらに調査されたように。
これはsearch_suggestion_row.xmlの例です
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.Apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="58dip"
style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown">
<!-- Icons come first in the layout, since their placement doesn't depend on
the placement of the text views. -->
<Android.support.v7.internal.widget.TintImageView
Android:id="@Android:id/icon1"
Android:layout_width="@dimen/abc_dropdownitem_icon_width"
Android:layout_height="48dip"
Android:scaleType="centerInside"
Android:layout_alignParentTop="true"
Android:layout_alignParentBottom="true"
Android:visibility="invisible"
style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown.Icon1" />
<Android.support.v7.internal.widget.TintImageView
Android:id="@+id/edit_query"
Android:layout_width="48dip"
Android:layout_height="48dip"
Android:scaleType="centerInside"
Android:layout_alignParentTop="true"
Android:layout_alignParentBottom="true"
Android:background="?attr/selectableItemBackground"
Android:visibility="gone"
style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown.Query" />
<Android.support.v7.internal.widget.TintImageView
Android:id="@id/Android:icon2"
Android:layout_width="48dip"
Android:layout_height="48dip"
Android:scaleType="centerInside"
Android:layout_alignWithParentIfMissing="true"
Android:layout_alignParentTop="true"
Android:layout_alignParentBottom="true"
Android:visibility="gone"
style="@style/RtlOverlay.Widget.AppCompat.Search.DropDown.Icon2" />
<!-- The subtitle comes before the title, since the height of the title depends on whether the
subtitle is visible or gone. -->
<TextView Android:id="@Android:id/text2"
style="?android:attr/dropDownItemStyle"
Android:textAppearance="?attr/textAppearanceSearchResultSubtitle"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="29dip"
Android:paddingBottom="4dip"
Android:gravity="top"
Android:layout_alignWithParentIfMissing="true"
Android:layout_alignParentBottom="true"
Android:visibility="gone" />
<!-- The title is placed above the subtitle, if there is one. If there is no
subtitle, it fills the parent. -->
<TextView Android:id="@Android:id/text1"
style="?android:attr/dropDownItemStyle"
Android:textAppearance="?attr/textAppearanceSearchResultTitle"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_centerVertical="true"
Android:layout_above="@Android:id/text2" />
</RelativeLayout>
<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-Android.googlesource.com_a_platform_manifest.git/lmp-mr1-supportlib-release/frameworks/support/v7/appcompat/res/layout/abc_search_dropdown_item_icons_2line.xml -->
動作しない場合は、動作するようにコーディングできます。この投稿で説明します。これはxamarinフォーム用ですが、andoirdネイティブに適用できることを願っています。背景、アイコン、クリアアイコン、色を変更できます