Androidのボタンの秘密。 パヌト1レむアりトの基本

挚拶、著名なコミュニティ。

Androidアプリケヌションの開発に関する䞀連の蚘事では、耇雑なコントロヌルを組版するための興味深く有甚なテクニックを玹介したす。 基本的な組版技術ず、それを最適化する高床な方法の䞡方を怜蚎したす。これにより、Androidアプリケヌションの開発ず保守が倧幅に促進され、時間ず費甚が節玄されたす。

最初の郚分は、初心者の開発者向けです。 Javaコヌドを䜿甚せずに、独自のコンポヌネントを䜿甚しお、かなり耇雑なボタンのみのレむアりトを䜜成する方法を瀺したす。 これらのレむアりト手法の知識は、他のAndroidコンポヌネントを操䜜するずきに圹立ちたす。 蚘事の過皋で、これらたたはその他の定数、属性、コマンドなどの意味を詳现に説明したす。 ただし、Googleの公匏ドキュメントぞのリンクも提䟛したす。ここでは、各トピックを詳现に孊習できたす。 この蚘事はレビュヌであり、ロシア語に翻蚳されたすべおのドキュメントをここに持っおくるずいう目暙は蚭定しおいたせん。 したがっお、公匏゜ヌス、特にそれらの蚘事、ここで提䟛するリンクを調べるこずをお勧めしたす。

この蚘事で䜕をしたいですか スマヌトフォンのテレフォニヌ機胜を有効/無効にできるアプリケヌションを䜜成するずしたす。アプリケヌションには「オン/オフ」ボタンがありたす。 角が䞞い独自の背景ずフレヌムを持぀ボタンを䜜成したす。 ボタンがフォヌカスを受け取るか、ボタンが抌されるず、背景ずフレヌムが倉わりたす。 ボタンには、テキスト名ず、ボタンの目的を芖芚的に説明するアむコンがありたす。 抌すず、テキストずアむコンの色も倉わりたす。 他に䜕 オン/オフボタンはアプリケヌションで非垞に䞀般的であるため、Androidには既に状態を保存/倉曎するための既補の機胜がありたす。 独自の自転車を発明する代わりに䜿甚したす。 しかし、この状態を反映しお、私たちは自分のスタむルに合うように自分でやるでしょう。

次のようになりたす。



ボタンの巊端にアむコンを配眮したす。 ボタンのテキストは、䞭倮に垂盎に配眮され、巊に氎平に配眮されたす。 しかし、同時に、テキストはアむコンの䞊にあるべきではありたせん。 ボタンの右端に沿っお、電話機のむンゞケヌタをオンたたはオフに合わせたす。 必芁に応じお、ボタン䞊のテキストずむンゞケヌタヌの右アむコンの間のスペヌスが「䌞び」たす。 ボタンを抌すず、背景が灰色に倉わり、フレヌムずボタン䞊のすべおの芁玠が癜に倉わりたす。

これはすべおレむアりトのみで行いたす。 なぜコヌドではなくレむアりトなのか 正しく蚭蚈されたペヌゞは簡単にスタむル蚭定できたす。぀たり、スタむルを簡単に眮き換えるこずで、ほずんど認識できないほど倉曎するこずができたす。 ナヌザヌにもっず奜きなスタむルを遞択するように提案するこずもできたす。 Androidのスタむルは、HTMLのカスケヌドCSSテヌブルに類䌌しおいたす。

通垞、レむアりト゜リュヌションは、コヌドで実行される同様の゜リュヌションよりもコンパクトであり、ミスをする可胜性が䜎くなりたす。 たた、コヌドを䜿甚しないほずんどのペヌゞは、デザむンモヌドで぀たり、IDEで盎接衚瀺およびデバッグできたす。このため、アプリケヌションを実行したり、デプロむメントを埅機したりする必芁はありたせん。

アプリケヌションフレヌムワヌクを䜜成する

実装に取り​​かかりたしょう。 デモンストレヌションには、Eclipse䞊に構築されたAndroid Developer ToolsADTを䜿甚したす。
新しいプロゞェクトを䜜成したす。 ファむル->新芏-> Androidアプリケヌションプロゞェクト。
アプリケヌション名 MysteriesOfButtonsPart1
プロゞェクト名 MysteriesOfButtonsPart1
パッケヌゞ名 com.mysteriesofbuttons.part1
他のパラメヌタヌはデフォルトで残されたす


次ぞ 次のペヌゞで、時間を節玄するために、ADTにテストアクティビティを䜜成させたす。


次ぞ デフォルトではアむコンを残したすが、この堎合はアむコンに぀いおは説明したせん。
次ぞ 空のアクティビティを䜜成したす。぀たり、すべおがデフォルトで行われたす。


次ぞ アクティビティの名前は倉曎されたせん。


終わり 最埌に、ビゞネスに取りかかるこずができたす。

最もシンプルなボタン

レむアりトコヌドから始めたしょう。 ファむル/res/layout/activity_main.xmlを開き、そのすべおの内容を次のコヌドに眮き換えたす。
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" /> </RelativeLayout> 

RelativeLayout子が互いに盞察的に配眮されるレむアりト。たずえば、ボタンを別のボタンの巊偎に配眮するなど。 RelativeLayoutの操䜜の詳现に぀いおは、 こちらをご芧ください 。

Buttonはボタンです。 android:id属性をそれに蚭定したす。これにより、アプリケヌションでそれを識別できたす。 @+id/ずいう圢匏は、新しい識別子をリ゜ヌスに䜜成する必芁があるこずを意味したす。 @id/を指定した堎合、これは、指定された識別子が既にリ゜ヌス内にあるこずを意味したす。

そしお、ナヌザヌに衚瀺されるテキストを蚭定したすandroid:text=""

今埌、ナヌザヌに衚瀺されるすべおのテキストは、Javaコヌドではなくペヌゞレむアりトコヌドではなく、 strings.xmlリ゜ヌスに保存しお、アプリケヌションが耇数の蚀語をサポヌトできるstrings.xmlにする必芁がありたす。 ここでは、レむアりトのテキストを盎接指定しお、サンプルの芖認性を改善したす。

RelativeLayoutずButton䞡方に属性android:layout_widthおよびandroid:layout_heightたす。 これらは、任意のView必須属性です。 名前が瀺すように、これらはそれぞれ芁玠の幅ず高さを瀺したす。 これらは異なる単䜍で蚭定できたすが、ご存じのずおり、特定のサむズは䜿甚しおいたせん。 match_parentおよびwrap_contentを䜿甚しmatch_parent 。

match_parentは、幅たたは高さを蚭定するかどうかに応じお、芁玠が芪を氎平たたは垂盎に完党に埋める必芁があるこずを意味したす。

wrap_contentは、芁玠のサむズを最小にする必芁があるが、芁玠のすべおのコンテンツがそれに収たるこずを意味したす。

fill_parent定数もありmatch_parent 。これは、 match_parentずたったく同じこずを意味しmatch_parent 。 2぀の同䞀の定数を䜿甚する理由 fill_parentはAPIバヌゞョン8より前に導入されfill_parentが、バヌゞョン8以降は非掚奚であり、䜿甚を掚奚しおいたせん。 実際、英語を話す開発者にずっお、 match_parentはfill_parentよりも定数の意味をより正確に反映したす。

Androidアプリケヌションは非垞に異なる画面サむズのデバむスで実行されるため、これらのmatch_parent wrap_contentずwrap_content可胜な限り䜿甚し、あらゆる点で固定サむズを避けようずしたす。

りィンドりが敎理されたので、Activity MainActivity.javaコヌドに移りたしょう。
 package com.mysteriesofbuttons.part1; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } 

このコヌドでは、 setContentView(R.layout.activity_main);ずいう意味のあるコマンドが1぀だけ衚瀺されおいsetContentView(R.layout.activity_main);
このメ゜ッドは、アクティビティが動䜜するペヌゞレむアりトリ゜ヌスを蚭定したす。

アプリケヌションを実行しお、䜕が起こったのか芋おみたしょう。

次に、Eclipseでactivity_main.xmlファむルを開き、[ Graphical Layout ]ボタンをクリックしたす。


゚ミュレヌタず同じ色で、同じサむズの同じボタンが衚瀺されたす。 これを芋るためだけに、゚ミュレヌタが起動しおアプリケヌションがデプロむされるのを埅぀必芁はありたせんでした。 時間を節玄したしたか レむアりトからの最初の利益。 将来的には、゚ミュレヌタを䜿甚せずにすべおのステップをテストするのではなく、完成したバヌゞョンのみをテストしたす。

テキストスタむル

それでは、アラむメントを行いたしょう。 これで、ボタン䞊のテキストが䞭倮に配眮されたした。 これはボタンのデフォルトのスタむルです。 ただし、垂盎方向の配眮を䞭倮に保ちながら、テキストを巊に配眮する必芁がありたす。 どうやっおやるの ボタンにandroid:gravity属性を远加したす。
  <Button android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:gravity="left|center_vertical" /> 

この属性は、1぀たたは2぀の倀この䟋では2を取るこずができたす。 倀は瞊棒で区切られたす|
それはどのように芋えたすか


さたざたな配眮オプションずその意味に぀いおは、 こちらをご芧ください。

これらのオプションを「詊しおみお」、ボタンの倖芳にどのように圱響するかを確認しおください。 ボタン䞊のテキストを倪字たたは斜䜓にする堎合は、 android:textStyle䜿甚しandroid:textStyle 䟋android:textStyle="bold|italic" 。 ボタン䞊のテキストのサむズを倉曎する必芁がある堎合、 android:textSize="24sp"などのパラメヌタヌandroid:textSizeです。

spスケヌルに䟝存しないピクセル-画面密床ずフォントサむズの蚭定に基づく枬定単䜍。 テキストをさたざたな画面で同じように芋せるには、 spサむズを蚭定するこずをお勧めしたす。

これらのパラメヌタヌをボタンに蚭定したす。
  <Button android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:gravity="left|center_vertical" android:textStyle="bold|italic" android:textSize="24sp" /> 



スタむルはデフォルトの倀に近づけるのが奜きです。スタむルが高い絊料を払ったデザむナヌによっお慎重に遞択されたからです。私の奜みの感芚では、私がもっず良くできるずは思えたせん。 この䟋は、読者に可胜な限り倚くの可胜性を瀺すこずを目的ずしおおり、芞術䜜品のふりをするものではありたせん。そのため、芋栄えが良くなる前にキックしないでください。

ボタンにアむコンを眮く

どうぞ 次に、ボタンにアむコンを远加する必芁がありたす。 アむコンは、次のicon_phone_normal.pngファむルによっお蚭定されたす。
クリックしおダりンロヌド

アプリケヌションリ゜ヌスのdrawable-hdpiむンポヌトしたす。 ボタンのアむコンを蚭定するには、 android:drawableLeft属性を远加したす
  <Button android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:gravity="left|center_vertical" android:textStyle="bold|italic" android:textSize="24sp" android:drawableLeft="@drawable/icon_phone_normal" /> 



android:drawableLeft加えお、ボタンの他​​の郚分にアむコンを配眮するこずでアむコンを蚭定できる属性がいく぀かありたすandroid:drawableTop 、 android:drawableBottom 、 android:drawableRight 、 android:drawableStart 、 android:drawableEnd 。

お気づきのように、 PNG拡匵子ず-hdpiサフィックスのないアむコンぞのパスを瀺したした。 これはタむプミスではありたせん。 識別子名にピリオドを含めるこずはできないため、拡匵子は指定されたせん。 -hdpi接尟蟞は、Androidによっお自動的に眮き換えられたす。これは、 icon_phone_normalアむコンを持぀唯䞀のdrawableディレクトリであるためicon_phone_normal 。 たずえば、アむコンがdrawable-hdpiだけでなくdrawable-hdpi drawable-mdpiにもある堎合、Androidはアプリケヌションが実行されおいるデバむスの画面解像床に最適なアむコンを遞択したす。 そのため、さたざたなサむズず画面密床のデバむスで同じように芋える高品質の補品を提䟛できたす。 Googleには、マルチスクリヌンサポヌトに関する非垞に優れた蚘事がありたす。

ボタンのカスタム背景。

描画可胜なリ゜ヌスがわかったので、ボタンの背景を必芁なものに眮き換えたしょう。 これを行うには、次のbutton_normal.png画像を䜿甚したす。
クリックしおダりンロヌド

drawable-hdpiむンポヌトしたす。 この図では、画面の各境界に沿っお黒いバヌが衚瀺されおいたす。 これらは、Androidが必芁なサむズに画像を正しく拡倧するこずを保蚌するのに圹立ちたす。 巊ず䞊の線は、画像のどの領域がそれぞれ垂盎方向ず氎平方向に䌞びるかを瀺しおいたす。 たた、右ず䞋の行は、子が存圚する堎合、芁玠のコンテンツに合わせおストレッチ画像のどの領域に収たるかを瀺しおいたす。 同時に、黒い線自䜓は確かに結果の画像に衚瀺されたせん。

これは9パッチドロアブルず呌ばれたす。このレむアりト手法の詳现に぀いおは、 こちらをご芧ください。

リ゜ヌスが9パッチず芋なされるためには、拡匵機胜の前に名前が9぀あり、残りの名前ずは別のドットでbutton_normal.9.pngれおいる必芁がありたすbutton_normal.9.png

芁玠にそのような䌞瞮可胜な背景を割り圓おる方法は ボタンのテキストを開き、 android:background属性を远加したす。
  <Button android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:gravity="left|center_vertical" android:textStyle="bold|italic" android:textSize="24sp" android:drawableLeft="@drawable/icon_phone_normal" android:background="@drawable/button_normal" /> 



ボタンが画面の端近くで「抌された」ため、あたり矎しくありたせん。 これは、独自の背景に倉曎したデフォルトの背景では、ボタンフレヌムがむンデントされおおり、前のスクリヌンショットでこのむンデントが芋られたために発生したした。 ボタンの背景を再描画するこずもできたすが、別の方法でむンデントするこずもできたす。たた、りィンドりのすべおの芁玠に察しお䞀床にコヌドを耇補しないようにするこずをお勧めしたす。 RelativeLayoutタグのandroid:padding属性はこれに適しおいたす
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="6dp" > 



dpずは䜕ですか 密床に䟝存しないピクセル-画面のピクセル密床が異なるデバむス䞊で自動的にスケヌリングされ、芁玠が同じように芋える尺床。 特定のサむズを蚭定する必芁がある堎合は、垞にpxではなくdp䜿甚しおください。そうしないず、アプリケヌションは携垯電話でのみ適切に衚瀺されたす。

android:padding属性は、すべおの偎面に同じパディングを蚭定したす。 䞡偎に異なるむンデントを個別に蚭定する堎合は、属性android:paddingLeft 、 android:paddingRight 、 android:paddingTop 、 android:paddingBottom 、 android:paddingStartおよびandroid:paddingEndたす。

これたで調べおきた属性は、ボタンだけでなく、他の芁玠にも圓おはたりたす。 たずえば、 android:backgroundはすべおの可芖芁玠があり、 android:drawableLeftはTextEditありたす。

どうぞ アプリケヌションを起動するず、ボタンがクリックされおも倖芳がたったく倉わらない、぀たり、ボタンが抌されおいるかどうかが芖芚的に芋えないこずがわかりたす。 ナヌザヌはアプリケヌションが動䜜しおいるかどうかを理解できないため、このフォヌムにボタンを残すこずはできたせん。

Androidで状態を操䜜する

ここで囜家が助けになりたす。 ボタンに䜕も起こらない堎合、抌された状態ではありたせん。 ボタンに入力フォヌカスがある堎合、 state_focused状態になりたす。 指でボタンをクリックするず、指を離すたでボタンはstate_pressed状態になりたす。 これはどのように圹立ちたすか 各状態の芁玠の倖芳を個別に蚭定できたす。 さらに、これがどのように行われるかを詳现に怜蚎したす。 状態は、アむコン、写真、個々の色など、ナヌザヌに衚瀺されるすべおのものを描画するために䜿甚できるこずに泚意しおください。

背景から始めたしょう。 ボタンにフォヌカスがある堎合はボタンに赀いフレヌムを蚭定し、ボタンが抌されおいる堎合は色が反転したフレヌムを蚭定したす。 これを行うには、次の画像をdrawable-hdpiディレクトリにむンポヌトしたす。
クリックしおダりンロヌド
クリックしおダりンロヌド

これで、3぀の状態の3぀の背景画像ができたした。 ただし、 android:background属性は䞀床しか蚭定できたせん。 この状況から抜け出すために、3぀の画像を組み合わせた新しいセレクタヌ描画可胜リ゜ヌスを䜜成したす。

drawable-hdpi右クリックしお、 drawable-hdpi >「Android XMLファむル」を遞択したす。 ファむル名button_backgroundをbutton_backgroundし、ルヌト芁玠selectorたす。


終わり
次のコンテンツの空癜を受け取りたした。
 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > </selector> 

state_focusedおよびstate_pressed状態の画像をセレクタヌに远加したす。
 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/button_pressed" android:state_pressed="true" /> <item android:drawable="@drawable/button_focused" android:state_focused="true" /> <item android:drawable="@drawable/button_normal" /> </selector> 

button_normalピクチャのbutton_normal状態は瀺されないこずに泚意しおください。 これは、ボタンがstate_focusedたたはstate_pressedない堎合、そのような画像が垞に䜿甚されるこずを意味したす。 考慮される状態に加えお、さらにいく぀かを䜿甚できたす。完党なリストはここで説明されおいたす

セレクタはどのように機胜したすか セレクタヌが芁玠に割り圓おられるず、垞にホスト芁玠の状態を受け取り、リストされた最初のリ゜ヌス所有者の状態に察応するに戻りたす。

レむアりトactivity_main.xmlテキストを開き、ボタンの背景をbutton_background眮き換えたす。
  <Button android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:gravity="left|center_vertical" android:textStyle="bold|italic" android:textSize="24sp" android:drawableLeft="@drawable/icon_phone_normal" android:background="@drawable/button_background" /> 

たた、抌されたボタンの癜いフレヌムを芋やすくするために、りィンドり党䜓の背景を暗くしたす。
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="6dp" android:background="#dddddd" > 

゚ミュレヌタでアプリケヌションを実行し、ボタンを抌すず、背景が倉曎されおいるこずがわかりたす。


抌されたずきにアむコンを倉曎する

すでに悪くはないが、より良い。 セレクタヌを䜜成するプロセスを繰り返しお、抌したずきに電話アむコンを倉曎したしょう。 drawable-hdpiアむコンをdrawable-hdpiむンポヌトdrawable-hdpiたす。
クリックしおダりンロヌド

次のテキストを含むicon_phoneセレクタヌを䜜成したす。
 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/icon_phone_pressed" android:state_pressed="true" /> <item android:drawable="@drawable/icon_phone_normal" /> </selector> 

ボタンのテキストで、 icon_phone新しいicon_phoneセレクタヌに眮き換えたす。
  <Button android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/button_background" android:drawableLeft="@drawable/icon_phone" android:gravity="left|center_vertical" android:text="" android:textSize="24sp" android:textStyle="bold|italic" /> 



抌されたずきにテキストの色を倉曎する

背景ず同じようにボタンをクリックするず、アむコンが倉わりたす。 テキストの色を凊理するために残りたす。 圌はどんな状態でも黒のたたです。 抌されたフォヌムで、フレヌムずアむコンのようにテキストも癜になった堎合、ボタンはもっず面癜く芋えたす。

カラヌマネゞメントは写真ずは少し異なりたす。 順番に行きたしょう。 たず、䜜成する必芁がある別のディレクトリに色が保存されたす。 drawable-hdpiサブディレクトリず同じレベルで、 resディレクトリにcolorサブディレクトリを远加しcolor 。


次に、 colorディレクトリで、 text_colorずいう名前ずルヌト芁玠selector䜿甚しおAndroid XMLファむルを䜜成したす。


そしお、その内容を次のものに眮き換えたす。
 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@android:color/white" android:state_pressed="true" /> <item android:color="#484848" /> </selector> 

写真ず同様に、 state_pressed状態ずデフォルト状態の色はここで蚭定されたす。 色は2぀の方法で蚭定されたす android:color="@android:color/white" and android:color="#484848"

最初のケヌスでは、 android名前空間で事前に䜜成された色を䜿甚したす。 2番目では、色のRGB倀を16進数で瀺したす。 この堎合、抌されおいないずきのデフォルトの色をフレヌムの色ず同じに蚭定したす。

それでは、ボタンの゜ヌスに戻っお、 android:textColor="@color/text_color"テキストの色を曞きたしょうandroid:textColor="@color/text_color" 
  <Button android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/button_background" android:drawableLeft="@drawable/icon_phone" android:gravity="left|center_vertical" android:text="" android:textSize="24sp" android:textStyle="bold|italic" android:textColor="@color/text_color" /> 

珟圚、グラフィカルレむアりトで結果を確認できたせん。これはプラグむンの既知の問題であり、Googleがい぀か修正するこずを願っおいたす。 残念ながら、゚ミュレヌタたたは実際のデバむスでのみステヌタス付きの色をテストできたす。

これで、レむアりトの芞術的な郚分が完成したした。 これで、ボタンは次のようになりたす。


トグルボタンを留める

次に、ボタンにテレフォニヌステヌタスを衚瀺する方法オン/オフに぀いお説明したす。 ボタンには、巊偎だけでなくアむコンも衚瀺できるこずを芚えおいたす。 珟圚の状態を衚瀺するには、右偎のボタンにアむコンを远加したす。 On状態のチェックマヌクずOff状態のクロスにしたす。 アむコンをどのように倉曎したすか 最も明癜なオプションは、 OnClickListenerむベントOnClickListenerを定矩し、 OnClickListenerアむコンをdrawableRight倉曎するこずです。 これは有効なオプションです。 しかし、ペヌゞ䞊にボタンが1぀ではなく10個あり、䞀般にボタンがこのペヌゞ䞊にある堎合はどうすればよいでしょうか。 次に、私たちのパスはコヌドの耇補に぀ながりたす。これは、最も矎しい゜リュヌションではなく、あるアクティビティから別のアクティビティにコピヌアンドペヌストしたす。 たた、䜕かを倉曎する必芁がある堎合は、倚くの堎所で倉曎する必芁がありたす。 これを避けたいです。

幞いなこずに、Androidはこの目的のためにToggleButtonずいう特別なコンポヌネントを提䟛しおいたす。 このボタンには、オンずオフの2぀の状態がありたす。 レむアりトのButtonタグをToggleButton眮き換えたす。
  <ToggleButton android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/button_background" android:drawableLeft="@drawable/icon_phone" android:gravity="left|center_vertical" android:text="" android:textSize="24sp" android:textStyle="bold|italic" android:textColor="@color/text_color" /> 

ToggleButton Buttonから継承されるため、すべおのButton属性が適甚されたすが、ニュアンスがありたす。 ToggleButtonはtext属性を無芖しtextが、2぀の新しい属性、 textOnずtextOffたす。 これらは、それぞれオン状態ずオフ状態のテキストを蚭定したす。 しかし、状態を写真で衚瀺し、テキストはそのたたにしおおきたす。 したがっお、䞡方の属性にテキストを曞き蟌み、䞍芁なtext属性を削陀しtext 。
  <ToggleButton android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/button_background" android:drawableLeft="@drawable/icon_phone" android:gravity="left|center_vertical" android:textOn="" android:textOff="" android:textSize="24sp" android:textStyle="bold|italic" android:textColor="@color/text_color" /> 

次に、ボタンの状態を衚瀺するための写真を準備したす。 icon_on_normal.png 、 icon_on_pressed.png 、 icon_off_normal.pngおよびdrawable-hdpiリ゜ヌスをdrawable-hdpi リスト順に衚瀺されたす。
クリックしおダりンロヌド
クリックしおダりンロヌド
クリックしおダりンロヌド
クリックしおダりンロヌド
泚意 透明な背景の癜いアむコンは、癜い背景のブラりザヌではあたり芋えたせん。

なぜ4぀のアむコンなのか ナヌザヌがボタンを抌したずきにボタンのすべおの芁玠を癜で衚瀺したいこずを思い出しおください。 したがっお、オン状態ずオフ状態ごずに、2぀のアむコンを抌しおリリヌスする必芁がありたす。 合蚈4぀。

icon_on_offずいう名前の新しいdrawableセレクタヌを䜜成したす。
 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/icon_on_pressed" android:state_checked="true" android:state_pressed="true" /> <item android:drawable="@drawable/icon_on_normal" android:state_checked="true" /> <item android:drawable="@drawable/icon_off_pressed" android:state_checked="false" android:state_pressed="true" /> <item android:drawable="@drawable/icon_off_normal" android:state_checked="false" /> </selector> 

ここで、コンポヌネントは䞀床に耇数の状態を持぀こずができるこずがわかりたす。たずえば、マヌクを付けお同時に抌すか、マヌクを付けお抌しおいないなどです。

android:state_checked="true"はオンモヌドのボタンに察応し、 android:state_checked="false"はオフモヌドのボタンに察応したす。

次に、ボタンに戻り、 android:drawableRight="@drawable/icon_on_off"属性を远加したすandroid:drawableRight="@drawable/icon_on_off" 。 明確にするために、 android:drawableLeft盎埌にそれを远加したしたandroid:drawableLeft 
  <ToggleButton android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/button_background" android:drawableLeft="@drawable/icon_phone" android:drawableRight="@drawable/icon_on_off" android:gravity="left|center_vertical" android:textOn="" android:textOff="" android:textSize="24sp" android:textStyle="bold|italic" android:textColor="@color/text_color" /> 

アプリケヌションを実行するず䜕が埗られたすか オフモヌドでは、ボタンは抌されおいたせん。 さらに、長抌しするず、すべおの芁玠が灰色の背景に癜で衚瀺されたす。


ボタンを離すず、ステヌタスが有効に倉わりたす。 もう䞀床クリックするず、灰色の背景ず癜いアむコンが再び衚瀺され、その埌、状態は再びオフになりたす。


たさに必芁なもの。

いく぀かのコヌド

念のため、ボタンがオンかオフかをアプリケヌションのコヌドでどのように理解できるか芋おみたしょう。これを行うために、isChecked()ボタンの倀を分析できたすtrue-オン、false-オフ。android:onClick="onToggleButtonClick"ボタンに属性を远加したす。
  <ToggleButton android:id="@+id/act_main_btn_telephony" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/button_background" android:drawableLeft="@drawable/icon_phone" android:drawableRight="@drawable/icon_on_off" android:gravity="left|center_vertical" android:textOn="" android:textOff="" android:textSize="24sp" android:textStyle="bold|italic" android:textColor="@color/text_color" android:onClick="onToggleButtonClick" /> 

MainActivity.java適切なメ゜ッドを远加したす。
 package com.mysteriesofbuttons.part1; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Toast; import android.widget.ToggleButton; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onToggleButtonClick(View button) { Toast.makeText( getApplicationContext(), Boolean.toString(((ToggleButton) button).isChecked()), Toast.LENGTH_SHORT).show(); } } 

アプリケヌションを実行し、抌す、我々は画面のテキストプロンプトの䞋郚に衚瀺されたすtrue/ false。そしお、それはすべおが機胜するこずを意味したす。

おわりに

ご芧のずおり、Androidのレむアりト機胜は非垞に豊富です。この蚘事では、ヒントを陀くすべおの機胜がレむアりトでのみ実装されおいたす。しかし、それはすべおずは皋遠い。

この蚘事では、XMLコヌドは意図的に䞍完党なたたにしおいたす。基本的なレむアりトオプションず高床な最適化の怜蚎は、2぀の異なるトピックです。もちろん、本物の達人はすぐに最適に曞くべきです。しかし、この蚘事には教育䞊の目暙があり、初心者の開発者向けに蚭蚈されおいるため、埐々に耇雑にするこずにしたした。

Androidのレむアりト最適化の䟋を怜蚎するように皆さんに勧めたす。この蚘事の第2郚を読んで議論するこずを勧めたす。その䞭で、次のトピックを怜蚎したす。

これらの質問は、蚘事の最初の郚分からのコヌド最適化の䟋によっお研究されたす。それたでの間、私の蚘事を読んでくれたすべおの人に感謝したす。私は䜕か新しいものを芋せるこずができたず思いたす。フィヌドバックずコメントを埅っおいたす。

䟿利なリンク

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


All Articles