AppCompat v21-ロリポップ以前のデバイスの材料設計

画像
10月17日にAndroid 5.0 SDKが公開され、新しいウィジェットとマテリアルデザインが導入されました。 Androidの以前のバージョンで最新の開発を使用できるように、サポートライブラリを拡張しました。 これらの変更には、 AppCompatRecyclerViewCardView、およびPaletteライブラリのメジャーアップデートが含まれます。

この投稿では、AppCompatの新機能と、アプリケーションで材料設計をサポートするためにそれを使用する方法について説明します。

AppCompatの新機能


AppCompatライブラリ(別名ActionBarCompat)は、Android 4.0からGingerbreadを搭載したデバイスへの新しいActionBar APIのポートとして登場しました。 彼女は、バックポートまたは標準実装の上に共通のAPIレイヤーを導入しました。 AppCompat v21は、Android 5.0のAPIと機能セットを提供します

このバージョンのAndroidでは、新しいツールバーウィジェットが登場しました。 ActionBarパターンの一般化であり、より多くの制御と柔軟性を提供します。 ツールバーは、一般的な階層のビュー要素であり、他のウィジェット、アニメーション、およびスクロールイベントに対する反応との対話の実装を簡素化します。 また、アクティビティのアクションバーとして使用することもできます。つまり、アクションメニューの標準要素がアクティビティバーに表示されます。

しばらくの間、AppCompatの更新バージョンを使用している可能性があります。 このライブラリは、PlayストアやPlayニューススタンドなど、最近数週間にリリースされたさまざまなGoogleプログラムのアップデートに含まれています。 さらに、上記のGoogle I / Oアプリに統合されており、これはオープンソースです。

設置


Gradleを使用する場合は、 build.gradleファイルに依存関係としてappcompatを追加するだけです。

dependencies { compile "com.android.support:appcompat-v7:21.0.+" } 

新しい統合

AppCompatをまだ使用していない場合、またはゼロから始めていない場合は、次のように接続します。

詳細については、AppCompatの包括的なガイドであるAction Bar API Guideを参照してください。

以前のバージョンからの移行

ほとんどのアプリケーションでは、 値/にトピック宣言が1つだけ必要になりました。

 values/themes.xml: <style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> <!-- Set AppCompat's actionBarStyle --> <item name="actionBarStyle">@style/MyActionBarStyle</item> <!-- Set AppCompat's color theming attrs --> <item name="colorPrimary">@color/my_awesome_red</item> <item name="colorPrimaryDark">@color/my_awesome_darker_red</item> <!-- The rest of your attributes --> </style> 

これで、 values-v14 +からすべてのActionBarスタイルを削除できます。

テーマ


AppCompatは、 プライマリカラーとアクセントカラーを使用してブランドに合わせてテーマをカスタマイズできる新しいカラーパレット属性をサポートしています。 例:

 values/themes.xml: <style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> <!-- colorPrimary is used for the default action bar background --> <item name="colorPrimary">@color/my_awesome_color</item> <!-- colorPrimaryDark is used for the status bar --> <item name="colorPrimaryDark">@color/my_awesome_darker_color</item> <!-- colorAccent is used as the default value for colorControlActivated, which is used to tint widgets --> <item name="colorAccent">@color/accent</item> <!-- You can also set colorControlNormal, colorControlActivated colorControlHighlight, and colorSwitchThumbNormal. --> </style> 

これらの属性を設定すると、AppCompatはAPI 21+から属性値として自動的にそれらを適用します。 そして、これにより、ステータスバーと最近のタスクのリスト内のアイテムに色が付けられます。

古いプラットフォームでは、AppCompatは可能であればカラーテーマをエミュレートします。 現在、これはアクションバーと一部のウィジェットの色付けに限定されています。

彩色されたウィジェット

Android 5.0を搭載したデバイスでアプリケーションを起動すると、すべてのウィジェットはテーマ属性で指定された色で色付けされます。 Lollipopでこれを行うことができる主な機能は2つあります。ドロアブルティントと、ドロアブル内のテーマ属性(フォーマット?Attr / foo )へのリンクです

AppCompatは、以下の多くのUIウィジェットに対して、以前のバージョンのAndroidで同様の動作を提供します。


それを機能させるために意図的に何もする必要はありません。 通常どおりマークアップでこれらの要素を使用すると、AppCompatが残りを行います(いくつかの注意事項があります。以下のFAQを参照してください)。

ツールバーウィジェット


画像
ツールバーは、AppCompatライブラリによって完全にサポートされており、SDKのウィジェットである機能とAPI呼び出しの両方と完全に一貫しています。 AppCompatでは、 android.support.v7.widget.Toolbarクラスを使用してツールバーが実装されます。 それを使用する2つの方法があります:

アクションバー

ツールバーをActionBarとして使用するには、まず、通常のActionBarを無効にします。 これを行う最も簡単な方法は、 Theme.AppCompat.NoActionBar (またはその明るいバージョン)からテーマを継承することです

次に、ツールバーのインスタンスを作成します。 たとえば、xmlマークアップファイルに含める

 <android.support.v7.widget.Toolbar android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" /> 

高さ、幅、背景などは完全にあなた次第です。これは良い例です。 ツールバーは単なるViewGourpであるため、必要に応じてスタイルと位置を設定できます。

最後に、アクティビティまたはスニペットでツールバーをActionBarとして設定します。

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.blah); Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); } 

これ以降、すべてのメニュー項目がツールバーに表示され、標準のメニュー設定呼び出しが表示されます。

オフラインでの使用

オフラインモードの違いは、ツールバーをActionBarとして設定しないことです。 したがって、任意のAppCompatテーマを使用でき、通常のActionBarを無効にする必要はありません。

オフラインモードでは、ツールバーにコンテンツまたはアクションを入力できます。 たとえば、アクションを表示する場合は、メニューを実装する必要があります。

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.blah); Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); // Set an OnMenuItemClickListener to handle menu item clicks toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { // Handle the menu item return true; } }); // Inflate a menu to be displayed in the toolbar toolbar.inflateMenu(R.menu.your_toolbar_menu); } 

ツールバーでできることは他にもたくさんあります。 詳細については、 Toolbar APIの説明を参照してください。

スタイル

ツールバーのスタイルのカスタマイズは、標準のアクションバーで行われた方法とは異なります。 スタイルは、ウィジェット自体に直接適用されます。

以下は、ツールバーをActionBarとして使用するときに使用する基本的なスタイルです。

 <android.support.v7.widget.Toolbar android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" app:theme="@style/ThemeOverlay.AppCompat.ActionBar" /> 

app:テーマ宣言は、フォントと要素が純粋な色(100%不透明な白など​​)を使用していることを確認します。

ダークアクションバー
レイアウト属性を使用して、ツールバーを直接カスタマイズできます。 ツールバーを「DarkActionBar」(暗いコンテンツ、明るいオーバーフローメニュー)のように表示するには、 テーマpopupTheme属性を指定します

 <android.support.v7.widget.Toolbar android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="@dimen/triple_height_toolbar" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

検索ウィジェット(SearchView)


AppCompatは、検索ウィジェット用の更新された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 (eg EditText) --> <item name="queryBackground">...</item> <!-- Background for the actions section (eg 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> 

すべての(または一部の)属性を指定する必要はありません。 デフォルト値は、ほとんどのアプリケーションに適合するはずです。

途中のツールバー...


この記事がAppCompatの使用開始に役立ち、すばらしいマテリアルスタイルのアプリケーションを作成できることを願っています。 AppCompatまたはサポートされているライブラリについて質問がある場合、またはより多くのドキュメントを提供できる場合は、元の記事/ Google + / Twitterのコメントでお知らせください

よくある質問


Lollipopより前のAndroidデバイスで、EditText(または上記のリストの別のウィジェット)が正しく色付けされないのはなぜですか?
AppCompatウィジェットの色付けは、レイアウトの実装をインターセプトし、カスタムの色付けされたウィジェットバージョンを挿入することで機能します。 ほとんどの人にとって、これは正しく機能します。 ただし、これが機能しない場合には、次のようないくつかのシナリオがあります。

ウィジェットの特別な色付きバージョンは、未完成の状態であるため、まだ非表示になっています。 これは将来変更される可能性があります。

Lollipop以外のデバイスでは、ウィジェットXにマテリアルスタイルがないのはなぜですか?
これまでのところ、最も一般的なウィジェットの一部のみが更新されています。 将来のリリースでは他のものが追加されます。

アクションバーにAndroid Lollipopに影が付いたのはなぜですか? android:windowContentOverlayをnullに設定します。
Lollipopでは、新しいリフトAPIを使用してパネルの下に影が作成されます。 削除するには、 getSupportActionBar()。SetElevation(0)を呼び出すか、Actionbarスタイルの説明で昇格属性値を設定する必要があります。

Lollipopより前のデバイスにリップルアニメーションがないのはなぜですか?
RippleDrawableがAndroid 5.0でシームレスにアニメーション化できるようにする主なものは、新しいRenderThreadです。 Androidの以前のバージョンでパフォーマンスを最適化するために、RippleDrawableを今のところオーバーボードしました。

環境設定でAppCompatを使用するにはどうすればよいですか?
v11 + APIを搭載したデバイスでアプリケーションを実行する場合、ActionBarActivityでPreferenceFragmentを引き続き使用できます。 APIの以前のバージョンを搭載したデバイスの場合、マテリアルデザインとして定型化されていない PreferenceActivityを使用する必要があります。

PSこれは私の最初の翻訳です。不正確な点については個人的な手紙で書いてください(特にロシア語に関して)

Source: https://habr.com/ru/post/J241479/


All Articles