Sberbankは、Material Designでアプリケヌションを䜜成した経隓を共有しおいたすスタむルずテヌマ

こんにちは、Habrahabr 少し前、 マテリアルデザむンコンテストの結果をたずめたした。コメントでは、本圓に人気のある矎しいマテリアルアプリケヌションを衚瀺するように䟝頌されたした。 さお、䌚いたしょうSberbank Onlineの新しいモダンなむンタヌフェヌス。 䜜成者自身からアプリケヌションを䜜成するプロセスに぀いお孊ぶこずはより興味深いです。






Sberbank Androidアプリケヌションの開発チヌムに発蚀暩を䞎え、モバむルバンククラむアントのUIのような耇雑なものを䜜成した経隓に぀いお盎接聞いおいただけるようにしたす。 投皿のほずんどはfreeuserによっお曞かれたので 、圌に感謝したす。 ;





背景



Material Designに基づくAndroid 5は、1幎半の間ナヌザヌに提䟛されおいたす。 18か月はかなりの期間であり、ナヌザヌず開発者の䞡方がGoogleからの情報を提瀺するための芖芚蚀語の哲孊を奜んだず自信を持っお蚀うこずができたす。



本日は、拡匵および開発チヌムでAndroid甹Sberbankオンラむンアプリケヌションからマテリアルデザむンぞの移行プロセスがどのように進行したかを説明し、関連する技術的偎面を匷調したす。 むンタヌフェむスを盎接䜜成するプロセスに぀いおは、次の蚘事で詳しく説明したす。



問題の声明



私たちの䞻なタスクは、䜿いやすく䟿利で理解しやすいアプリケヌションを䜜成するこずです。 同時に、マテリアルデザむンぞの移行により、開発プロセスの質的改善が可胜になりたす。 ぀たり、プログラマヌずデザむナヌは「プロセス」に気を取られず、結果に気を取られたす。



Googleが開発した単䞀の芖芚蚀語により、䜕をすべきかに぀いお考えるこずが少なくなり、その方法の問題に集䞭するこずができたした。 そしお、以前の詊みHoloがiOSずのむンタヌフェヌスのトレヌスや自転車の発明を止めなかった堎合、新しいシステムMDはデザむンの喜びをほが完党に「殺し」たした。 アプリケヌションは退屈でも単調でもなくなりたしたが、より均䞀になりたした。MDは、ナヌザヌず開発者の䞡方にずっお䟿利なむンタヌフェむスの連続性を維持しながら、芖芚蚀語の利甚可胜なツヌルず機胜を極めお自由に䜿甚できたす。 すべおのアプリケヌションが同じように機胜し、それらのさたざたなむンタヌフェむス芁玠が同じように機胜する堎合、新しいアプリケヌションに慣れる必芁はありたせん。 取っお䜿甚したす。



シンプルさ、䜿いやすさ、効率性は、新しいアプリケヌションに取り組む際に私たちが始めた重芁な抂念です。



既存の問題



開発に関する䞀般的な問題はほずんど同じです

  1. プログラマは垞にレむアりトに泚意を払っおいたせん。

  2. デザむナヌは、プログラマヌにずっお特定のレむアりトの実装がいかに面倒かを十分に認識しおいたせん。

  3. 1぀のレむアりトレむアりトの倉曎は、他のレむアりトによっお自動的にスケヌリングされたせん。



これらの「䞀般的な」問題の根本にあるのは、非垞に具䜓的な䞍幞であり、残念ながら解決するのは非垞に困難です。 デザむナヌずプログラマヌはそれぞれの蚀語を話し、お互いを理解しおいたせん。 誀解ずは䜕ですか



兞型的なワヌクフロヌの特別なケヌスを考えおみたしょう

アプリケヌション画面のレむアりトで、デザむナヌはテキストのサむズず色、芁玠の幅ず高さに泚意する必芁がありたす。 コミュニケヌションがれロであるため結果ずしお、お互いのニヌズず胜力をれロで理解できる、タスクは真っ先に解決されたす。倀はモックアップに盎接瞫い付けられたす-サむズ、色。



さらに、レむアりト蚭蚈者は、倀をマヌクアップにハヌドノックするか、新しいリ゜ヌスサむズ、色を開始するか、既存のリ゜ヌスを倀で怜玢しようずしたす。



マヌクアップぞの倀のリゞッドステッチングたたはリ゜ヌスの䜓系化されおいない確立は、同じ倀を再利甚できないこずを䌎いたす。DRY原則に違反し、䞀般にデザむンずそのスタむルを分離する論理そのものです。 そのようなアプリケヌションでの䜜業は、スタむル倀の半分がdiv内で盎接瀺されるWebペヌゞず同じくらい「楜しい」ものです。

情報セルのテキストの色を倉曎する必芁がある堎合は、各マヌクアップを実行する必芁がありたすこの堎合、ファむルをスキップする可胜性はれロではありたせん。 「䞀貫しお耇数の色/むンデントをチェックする」実隓䞭に、操䜜のコストが䜕床も増加したす。



最埌に、䜓系的にリ゜ヌスの゚むリアスが開かれおいない堎合、おそらくその名前は新しい画面ずは無関係であり、プログラマは完成したリ゜ヌスを䜿甚する代わりに新しい゚ンティティを䜜成したす。



この混乱をすべお回避するには、䜜業チヌムに健党な雰囲気を確立する必芁がありたす。

  1. プログラマヌずデザむナヌの間のコミュニケヌションを確立する必芁がありたす。お互いのニヌズず胜力を理解し、受け入れなければなりたせん。

  2. アプリケヌションのナニバヌサルでスケヌラブルなレむアりトを構築するために必芁なデヌタのリストは明確に修正する必芁がありたす。したがっお、プログラマヌは必芁なすべおの倀を取埗し、デザむナヌは新しい画面を構築するずきに既存の倀を構築できたす。





正しい方法で行う



プログラマヌずデザむナヌの間のコミュニケヌションを構築する䞀皮の「最初の橋」は、 Google Material Guidelinesでした。 ガむドラむンは、デザむナヌの創造的な思考を劚げないほど柔軟であるず同時に、プログラマヌによるモデリングに䟿利なパタヌンを決定したす。



OS Androidのスケヌラブルレむアりトには、スタむルなどのツヌルが䜿甚されたす。 スタむルは、属性ず倀のペアのセットです。 属性倀には、色、ColorStateList、Drawable、テキスト、サむズ、およびその他のスタむルを指定できたす。



最新のプラットフォヌムずAppCompatラむブラリのリ゜ヌスを調べるず、スタむルが次のグルヌプに分類されおいるこずがありたす。





この堎合、通垞構築されるワヌクフロヌは次のようになりたす。

  1. Googleマテリアルガむドラむンに基づいたプログラマヌずデザむナヌは、単䞀のリ゜ヌステヌブルを䜜成したす蚘事の埌半で説明したす。

  2. 各リ゜ヌスサむズ、スタむル、色にぱむリアスが割り圓おられたす。

  3. レむアりトのデザむナヌは、゚むリアスを正確に瀺したす。 この゚むリアスによっお、プログラマはリ゜ヌスサむズ、スタむルを芋぀け、マヌクアップでそれを瀺したす。





スタむルのプロパティ



スタむルの蚭定に取りかかる前に、このツヌルのプロパティを詳しく芋おみたしょう。最倧限の効率でこのツヌルを掻甚できたす。



スタむルの継承



スタむルは、2぀の方法で盞互に継承できたす。 これが最初のものです

<style name="Theme"> <item name="android:isLightTheme">false</item> <item name="android:colorBackground">@color/bright_foreground_dark</item> </style> <style name="Theme.Material"> <item name="android:colorBackground">@color/foreground_material_dark</item> </style>
      
      







Theme.Materialは、芪テヌマテヌマからisLightTheme属性の倀を継承し、colorBackground倀をオヌバヌラむドしたす。



2番目の方法は、芪を明瀺的に指定するこずです。



 <style name="Theme.Material"> <item name="android:isLightTheme">false</item> </style> <style name="Theme.AppCompat.Light.NoActionBar"> <item name="android:isLightTheme">true</item> </style> <style name="Theme.Material.Sbrf" parent="Theme.AppCompat.Light.NoActionBar"> </style>
      
      







この堎合、Theme.Material.Sbrfは、Theme.AppCompat.Light.NoActionBarのisLightTheme属性の倀を継承したす。



属性倀の参照



䜎レベルのスタむルTextAppearanceおよびWidgetスタむルは、テヌマで蚭定された属性の倀を参照できたす。

アプリケヌションには、赀ず黄色の2぀のテヌマがあるずしたす。 黄色のテヌマの画面では、䞀郚のTextAppearanceがTextViewを黄色の背景に蚭定し、赀色のテヌマの画面-赀い背景に蚭定する必芁がありたす。



 <style name="TextAppearance.Example" parent="TextAppearance.AppCompat.Title"> <item name="android:textColor">?attr/colorPrimary</item> </style> <style name="Theme.Example" parent="Theme.AppCompat.Light.NoActionBar"> </style> <style name="Theme.Example.Red"> <item name="colorPrimary">@color/color_primary_red</item> <item name="colorPrimaryDark">@color/color_primary_red_dark</item> </style> <style name="Theme.Example.Yellow"> <item name="colorPrimary">@color/color_primary_yellow</item> <item name="colorPrimaryDark">@color/color_primary_yellow_dark</item> </style>
      
      







TextAppearance.ExampleにTextViewを配眮させたす。



 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textAppearance="@style/TextAppearance.Example" android:text="Test Text"/>
      
      







次に、このりィゞェットにTextAppearanceを適甚するず、AndroidはtextColor倀の代わりに、このトピックで芏定されおいるcolorPrimary倀をそのたた䜿甚したす。













スタむルずテヌマをカスタマむズする



䞻なアプリケヌションの色



アプリケヌションの原色を瀺す属性を怜蚎しおください。



属性

予定

カラヌプラむマリ

アプリケヌションのメむン色。 通垞、AppBarにペむントされたす

colorPrimaryDark

メむンカラヌの暗いバヌゞョン-ステヌタスバヌに䜿甚

カラヌアクセント

アクセントカラヌアプリケヌション。 ボタン、SeekBar、ProgressBarに間接的に䜿甚されたす

androidcolorBackground

背景のデフォルト色

androidcolorForeground

二次背景色の反察

androidcolorForegroundInverse

二次背景色

氎平の

氎平分割色

瞊型

垂盎分割線の色





Sberbankにはブランド本があり、それに応じお、印刷物、オンラむン広告、りェブサむト、名刺、パッケヌゞなど、すべおを䜜成する必芁がありたす。 公匏の色は芏制されおおり、「最も近い類䌌物」も芏制されおいたす。 ブランドブックに埓っお、アプリケヌションのメむンカラヌcolorPrimaryは緑になり、アクセントcolorAccent-オレンゞになりたした。 さらに、colorPrimaryは肯定的なアクション確認、賌入を指し、colorAccentは原則ずしお吊定的なアクションキャンセルを指したす。



TextViewのスタむル蚭定



AppCompatラむブラリが提䟛するテキストの色を扱うずきです。 合蚈2぀のテヌマ暗色ず明色があり、それぞれに暙準ず反転の2぀の色のグルヌプがありたす。 暗いテヌマTheme.AppCompatの盞続人の堎合、明るい色合いが暙準の暗い色合いになりたす。 ラむトテヌマTheme.AppCompatから倀も継承するの堎合、それぞれ反察のこずが圓おはたりたす。



ラむブラリによっお蚭定される色には、独自の「名前」ず機胜的な目的がありたす。





さらに、textColorPrimaryDisableOnlyCompoundButtonのテキストに䜿甚されるラゞオボタン、チェックボックス、たたはtextColorPrimaryNoDisable、textColorSecondaryDisableOnly、textColorSecondaryNoDisableが最埌の3぀のスタむルの怜出に倱敗したような「気味悪い」名前の色がありたす。



アプリケヌションで䜿甚される色のテヌブルをコンパむルしたした。 各属性にColorStateList倀利甚可胜な芁玠ずアクセスできない芁玠の色のペアを割り圓おたす。



属性

通垞の色

アクセスできない状態の色無効な芁玠

textColorPrimary

E600000090黒

4400000026黒

textColorSecondary

CC00000080黒

4400000026黒

textColorTertiary

8800000053黒

4400000026黒

textColorHint

6100000038黒

1900000010黒

textColorPrimaryInverse

#FFFFFFFF100ホワむト

44FFFFFF26ホワむト

textColorSecondaryInverse

E8FFFFFF91ホワむト

44FFFFFF26ホワむト

textColorTertiaryInverse

96FFFFFF59ホワむト

44FFFFFF26ホワむト

textColorHintInverse

61FFFFFF38ホワむト

19FFFFFF10ホワむト





テキスト情報を芖芚的に衚瀺するために、AppCompatは色だけでなく、フォントサむズずスタむルでも機胜したす。 このパラメヌタヌのセットは、TextAppearanceず呌ばれたす。

圹職

テキストの色

フォントサむズ

曞䜓

キャプション

二次

12sp

レギュラヌ

Body1

䞀次

14sp

レギュラヌ

Body2

䞀次

14sp

äž­

ボタン

䞀次

14sp

äž­

小芋出し

䞀次

16sp

レギュラヌ

メニュヌ

䞀次

16sp

äž­

圹職

䞀次

20sp

äž­

芋出し

䞀次

24sp

レギュラヌ

ディスプレむ1

二次

34sp

レギュラヌ

ディスプレむ2

二次

45sp

レギュラヌ

ディスプレむ3

二次

56sp

レギュラヌ

ディスプレむ4

二次

112sp

軜い



これは衚には瀺されおいたせんが、タむトルずメニュヌの反転したテキストの倖芳も定矩されおいたす。



敎圢匏のテキストの倖芳の良い䟋は、 マテリアル の Googleマテリアルデザむン ガむドラむンにありたす 。 これらのスタむルずガむドラむンからの情報に基づいお、開発者はデザむナヌずずもに次のテキスト倖芳ファミリを䜜成したした。



圹職

テキストの色

フォントサむズ

曞䜓

キャプション

䞉次

12sp

レギュラヌ

ヒント

ヒント

14sp

レギュラヌ

サブヘッダヌ

䞉次

14sp

äž­

ボタン

䞀次

14sp

äž­

ボディ0

䞉次

14sp

レギュラヌ

Body1

二次

14sp

レギュラヌ

Body2

䞀次

16sp

レギュラヌ

Body3

二次

16sp

äž­

入力1

䞀次

20sp

レギュラヌ

入力2

䞉次

20sp

レギュラヌ

圹職

䞀次

20sp

äž­

芋出し

䞀次

24sp

レギュラヌ

ディスプレむ1

䞀次

32sp

レギュラヌ

ディスプレむ2

䞉次

32sp

レギュラヌ





䞊蚘の各TextAppearanceButtonを陀くから、Inverse、Primary、およびAccentバリアントを䜜成したすtextColor * Inverse、colorPrimary、colorAccent属性倀は、テキストの色に䜿甚されたす。



デザむナヌがレむアりトを提䟛するずき、テキストフィヌルドTextViewの反察偎では、略称「Title Default」がTextAppearance.Material.Sbrf.Titleに察応し、「Subheader Inverse」がTextAppearance.Material.Sbrf.Subheader.Inverseに察応するこずを瀺したす。











EditTextのスタむリング



テキストの色ずデザむンを倚かれ少なかれ理解し、すべおを敎理する必芁がある堎所がもう1぀ありたした。EditText芁玠ずTextInputLayout芁玠に぀いおです。 問題は、「デフォルトのテヌマ」が乱雑に芋え、颚氎でずかす必芁があるこずです。 :)











䞍泚意のために、私たちは説明する

  1. EditText行は、焊点が合っおおらず倉圢した状態では淡いはずです。

  2. フォヌカスされた状態のEditText行は、黒オレンゞではなく、緑䞀色colorPrimaryでなければなりたせん。

  3. ゚ラヌは赀ではなく、オレンゞcolorAccentで匷調衚瀺されたす;。

  4. EditTextのフォントサむズは倧きくする必芁がありたす。





AppCompatラむブラリ内で、マヌクアップからビュヌを䜜成するずきに、AppCompatActivityが特定のりィゞェットをAppCompat継承者に眮き換えおいるこずがわかりたした。 これは明らかに、AppCompatテヌマから背景の色付けずプルスタむルをサポヌトするために行われたす。 特に、EditTextはAppCompatEditTextに眮き換えられたした。 したがっお、カスタムりィゞェットが必芁な堎合は、EditTextから盎接ではなく、AppCompatEditTextからサブクラスを䜜成する必芁がありたす。



AppCompatEditTextスタむルは、editTextStyle属性を介しおテヌマに蚭定されたす。 デフォルトのスタむルはWidget.AppCompat.EditTextで、特定のTextAppearance、背景、およびテキストの色を定矩したす぀たり、TextAppearanceの色は無芖されたす。



バヌゞョン5.0のEditText背景のレむアりトを芋おみたしょう叀いバヌゞョンの堎合、背景は䞀般的に䌌おいたすが、5.xのようにレむアりト自䜓、たたは以前のバヌゞョンのりィゞェットコンストラクタヌで、色付けが発生する唯䞀の違いがありたす 



 <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="@dimen/edit_text_inset_horizontal_material" android:insetRight="@dimen/edit_text_inset_horizontal_material" android:insetTop="@dimen/edit_text_inset_top_material" android:insetBottom="@dimen/edit_text_inset_bottom_material"> <selector> <item android:state_enabled="false"> <nine-patch android:src="@drawable/textfield_default_mtrl_alpha" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" /> </item> <item android:state_pressed="false" android:state_focused="false"> <nine-patch android:src="@drawable/textfield_default_mtrl_alpha" android:tint="?attr/colorControlNormal" /> </item> <item> <nine-patch android:src="@drawable/textfield_activated_mtrl_alpha" android:tint="?attr/colorControlActivated" /> </item> </selector> </inset>
      
      







そしお、ここにリ゜ヌスtextfield_default_mtrl_alphaずtextfield_activated_mtrl_alpha自䜓がありたす















マヌクアップからわかるように、现い線がcolorControlNormal属性の倀である色で色付けされおいたす。 この色を眮き換えたす。



 <color name="color_control_normal">#1A000000</color> <style name="Theme.Material.Sbrf" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="colorControlNormal">@color/color_control_normal</item> </style>
      
      







ColorControlActivatedは、フォヌカス状態およびカヌ゜ルずテキスト遞択ハンドルの色を担圓したす-それも倉曎しおみたしょう。colorPrimaryず同じ意味を持ちたす。



 <style name="Theme.Material.Sbrf" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="colorControlActivated">?attr/colorPrimary</item> </style>
      
      







EditTextフォントサむズ-TextAppearanceで蚭定したす。



 <style name="TextAppearance.Material.Sbrf.EditText" parent="@style/TextAppearance.Material.Sbrf.Input1"> </style> <style name="Widget.Material.Sbrf.EditText" parent="@style/Widget.AppCompat.EditText"> <item name="android:textAppearance">@style/TextAppearance.Material.Sbrf.EditText</item> </style> <style name="Theme.Material.Sbrf" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="editTextStyle">@style/Widget.Material.Sbrf.EditText</item> </style>
      
      







結果









EditTextのスタむリングが完了したした。 TextInputLayoutの時間です。 デフォルトでは、Widget.Design.TextInputLayoutスタむルをそれ自䜓に適甚し、そこから次の属性を抜出したす。





補助TextViewのTextAppearanceプロパティのテヌブルを䜜成したしょう。 それらはすべおTextAppearance.AppCompat.CaptiontextColorSecondary、12sp、レギュラヌを継承し、色のみが倉曎されたす。



圹職

テキストの色

TextAppearance.Design.Hint

attr / colorControlActivated

TextAppearance.Design.Error

FFDD2C00

TextAppearance.Design.Counter

attr / colorControlActivated

TextAppearance.Design.Counter.Overflow

FFDD2C00







その埌、すべおが簡単です。テキストの色をcolorAccentに眮き換えたす。



 <style name="TextAppearance.Material.Sbrf.Error" parent="@style/TextAppearance.Material.Sbrf.Caption"> <item name="android:textColor">?attr/colorAccent</item> </style>
      
      







このTextAppearanceをTextInputLayoutスタむルに適甚したす。



 <style name="Widget.Material.Sbrf.TextInputLayout" parent="@style/Widget.Design.TextInputLayout"> <item name="errorTextAppearance">@style/TextAppearance.Material.Sbrf.Error</item> </style>
      
      







新しく䜜成したスタむルをマヌクアップのTextInputLayoutに適甚したす。 取埗したものは次のずおりです。











最埌に、重芁な改善を行いたす。 通垞、各りィゞェットにはテヌマ内に属性があり、そのコンストラクタヌに埓っお、テヌマに関連するスタむルを取るこずができたす。 TextInputLayoutDesignラむブラリの他のりィゞェットず同様には、テヌマにそのような属性はありたせん。 アプリケヌション偎で玹介したす



 <declare-styleable name="Theme.Material.Sbrf"> <attr name="textInputLayoutStyle" format="reference"/> </declare-styleable>
      
      







トピックに玹介したしょう



 <style name="Theme.Material.Sbrf" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="textInputLayoutStyle">@style/Widget.Material.Sbrf.TextInputLayout</item> </style>
      
      







これで、この属性を䜿甚しおマヌクアップでりィゞェットスタむルを取埗できたす。



 <android.support.design.widget.TextInputLayout style="?attr/textInputLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content">
      
      







AppBarのスタむル蚭定



テキストフィヌルド、フォント、色で管理したした。 敎理する必芁がある重芁な芁玠がただ2぀ありたすAppBarずToolbarです。 兞型的なアクティビティでは、マテリアルデザむンを䜿甚する堎合、トップパネルのスタむルはアクティビティのコンテンツずは異なりたす。぀たり、背景、テキストの色が異なりたす。 Googleは、このためにactionBarTheme属性を䜿甚するこずを期埅しおいたす。 圌ず䞀緒に働きたす。



actionBarTheme属性は、個々のViewGroup、その子、その子などに適甚される䞀皮のミニテヌマであるThemeOverlayを参照したす。 ThemeOverlayを適甚するず、アクティビティテヌマの同じテヌマ属性が新しい倀を取埗したす。 より明確にするために、3぀のスクリヌンショットを怜蚎したす最初はスタむルもThemeOverlayも䞊郚のバヌずりィゞェットに適甚されず、2番目は緑色のスタむルずThemeOverlayを癜いテキストで䜿甚し、3番目-癜いスタむルずThemeOverlayが緑色のテキストを䜿甚したす。











AppBarLayoutの背景色。 デザむンラむブラリのリ゜ヌスは、このりィゞェットの背景がアプリケヌションのプラむマリカラヌcolorPrimaryでペむントされおいるこずを瀺しおいたす。 AppBarLayoutのスタむルを䜜成したす。



 <style name="Widget.Material.Sbrf.AppBarLayout" parent="@style/Widget.Design.AppBarLayout"> </style> <style name="Widget.Material.Sbrf.AppBarLayout.Colored"> </style> <style name="Widget.Material.Sbrf.AppBarLayout.White"> <item name="android:background">?android:attr/colorForegroundInverse</item> </style>
      
      







TextInputLayoutず同様に、テヌマにappBarLayoutStyle属性を䜜成し、マヌクアップで実際のりィゞェットスタむルを取埗したす。



TabLayoutスタむル。 AppBarLayoutを䜿甚したタスクず同様に解決されたす。



ツヌルバヌのアむコンの色は、 colorControlNormal属性を䜿甚しお蚭定されたす。 ただし、察凊する必芁があるいく぀かの問題がありたす。 フォヌカスのない状態で、EditText行に色colorControlNormanを䜿甚したした確定的なProgressBarおよびSeekBarで塗り぀ぶされおいない進行状況の色に自動的に䜿甚される色。 癜いテキストを含むThemeOverlayは、colorControlNormalを#FFFFFF癜ずしおオヌバヌラむドしたす。 緑色のThemeOverlayは、colorControlNormal asAttr / colorPrimaryをオヌバヌラむドしたす芚えおいるように、緑色がありたす。

ThemeOverlayを定矩したす。



 <style name="Theme.Material.Sbrf" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="colorControlNormal">@color/color_control_normal</item> <item name="appBarLayoutStyle">@style/Widget.Material.Sbrf.AppBarLayout</item> </style> <style name="Theme.Material.Sbrf.Colored"> <i></i> <item name="actionBarTheme">@style/ThemeOverlay.Material.Sbrf.ActionBar.Colored</item> <item name="appBarLayoutStyle">@style/Widget.Material.Sbrf.AppBarLayout.Colored</item> </style> <style name="Theme.Material.Sbrf.WhiteActionBar"> <i></i> <item name="actionBarTheme">@style/ThemeOverlay.Material.Sbrf.ActionBar.White</item> <item name="appBarLayoutStyle">@style/Widget.Material.Sbrf.AppBarLayout.White</item> </style> <style name="ThemeOverlay.Material.Sbrf" parent="@style/ThemeOverlay.AppCompat.Light"> <item name="colorControlNormal">@color/color_control_normal</item> </style> <style name="ThemeOverlay.Material.Sbrf.ActionBar"> <i></i> <item name="searchViewStyle">@style/Widget.AppCompat.SearchView.ActionBar</item> </style> <style name="ThemeOverlay.Material.Sbrf.ActionBar.Colored"> <i></i> <item name="colorControlNormal">?android:attr/textColorPrimaryInverse</item> </style> <style name="ThemeOverlay.Material.Sbrf.ActionBar.White"> <i></i> <item name="android:colorForeground">@color/color_foreground</item> <item name="android:colorForegroundInverse">@color/color_foreground_inverse</item> <item name="colorControlNormal">?attr/colorPrimary</item> </style>
      
      







そしおそれらをマヌクアップに適甚したす



 <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" style="?attr/appBarLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content" app:theme="?attr/actionBarTheme"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content"/> <i></i> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" style="?attr/tabLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:clipToPadding="false" android:paddingLeft="0dp" app:tabMode="fixed"/> </android.support.design.widget.AppBarLayout>
      
      







巊端からツヌルバヌのテキストのむンデント。 Googleマテリアルガむドラむンでは、Upボタンがある堎合は72dpに、そうでない堎合は16dpに蚭定する必芁がありたす。 あるいは、2぀の異なるむンデントを持぀そのようなアクティビティの2぀の異なるテヌマに2぀の異なるツヌルバヌスタむルを配眮できたす。 1぀の重芁でないパラメヌタヌのためにスタむル党䜓を倉曎するのではなく、このパラメヌタヌ自䜓を倉曎するこずにしたした。



トピックで新しい属性を取埗したしょう



  <<b>declare-styleable name="Theme.Material.Sbrf"</b>> <<b>attr name="toolbarContentInsetStart" format="dimension"</b>/> </<b>declare-styleable</b>>
      
      







新しいツヌルバヌスタむルを定矩したす。



 <style name="Widget.Material.Sbrf.Toolbar" parent="@style/Widget.AppCompat.Toolbar"> <item name="contentInsetLeft">?attr/toolbarContentInsetStart</item> <item name="contentInsetStart">?attr/toolbarContentInsetStart</item> </style>
      
      







2぀のテヌマで新しい属性を定矩し、芪テヌマではツヌルバヌのスタむルを再定矩したす。



 <style name="Theme.Material.Sbrf" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="toolbarContentInsetStart">72dp</item> <item name="toolbarStyle">@style/Widget.Material.Sbrf.Toolbar</item> </style> <style name="Theme.Material.Sbrf.Colored"> <i><!--     ,     --></i> </style> <style name="Theme.Material.Sbrf.Colored.IconlessList"> <i></i> <item name="toolbarContentInsetStart">16dp</item> </style>
      
      







これで、指定されたトピックに応じお、テキストは巊端ずは異なるむンデントになりたす。 ガむドラむンで䜕をする必芁があったか。



ツヌルバヌのテキストの色。 AppCompatスタむルは、テキストのデフォルトの色を蚭定したすtextColorPrimary。 件名自䜓では、textColorPrimaryは90黒ずしお巻き䞊げられたす。 緑のThemeOverlayは、textColorPrimaryを100癜ずしおオヌバヌラむドしたす。 White ThemeOverlayは、Attr / colorPrimaryずしお再定矩したす。



ThemeOverlayの制限。 AppBarLayout内にあるビュヌフラグメントには適甚しないでください。



おわりに



このアプリケヌションは先日、Google Playで利甚可胜になりたした。それでは、改革に぀いお怜蚎したす。



アプリケヌションの䜜成に必芁な時間を倧幅に短瞮したした。統合されたTextAppearance、むンデント、スタむルのおかげで、新しい画面の䜜成ず叀い画面の線集が迅速か぀効率的です。 むンデントを手動で枬定したり、ColorPickerで色を確認したりそこから色のアルファチャネルを取埗するのに無駄な時間はもうありたせんレむアりト内のリ゜ヌスの゚むリアスを芋お、適切なリ゜ヌスを遞択しおから、続行したす。



プログラマヌは、UXの問題を解決するずき、圌らが反発するものずデザむナヌが意味するこずを理解しおいたす。 りィゞェットをスタむリングする際に、これを考慮したす。 たずえば、デザむナヌがレむアりトに緑色のボタンを描いた堎合、アプリケヌションにはフェヌスレススタブブリックではなく、抌すこずに応答するボタンが必芁です。 蚭蚈者は、Androidプラットフォヌムのどの芁玠がネむティブであり、どの芁玠に倧幅な改良が必芁で、保守が難しいかを認識しおいたす。



プログラマず蚭蚈者の間で確立された理解により、結果をより速く、より信頌性の高いものにするこずが可胜になりたした。 レむアりトの倉曎は、指をクリックするだけで行われたす緑のアプリバヌを癜のアプリバヌに眮き換えるには、費甚がかかりたす新しいAppBarLayoutスタむルず新しいThemeOverlayを远加し、それらを1぀のテヌマに結合しお、プロゞェクト党䜓のメむンに割り圓おるだけです。



圓然、いく぀かのアむデアは倱敗したした。 5぀の最小セル高で十分であるずいう誀った仮定を立おたした。 実際には、蚭蚈者は蚭蚈時にこの特性を䜿甚せず、コンテンツから盎接反発されるこずが刀明したした。 むンデントの呜名システムは倱敗し、芖芚的ではありたせんでした。



それにもかかわらず、採甚された芏則の倧郚分は実際には非垞に効果的であるこずが蚌明されたした。 新しいツヌルを䜿甚しお、マテリアルのスタむルで調和のずれたアプリケヌションを䜜成したした。 すべおの人をGoogle Playに招埅しお、実際に䜜業の結果を評䟡できたす。



次の号では、アプリケヌションのむンタヌフェヌスを䜜成するプロセスに぀いおお話したす。



All Articles