こんにちは、ハラジテリ。 この記事では、「ハイライトされた」ウィジェット、つまりトラックボールまたはボタンの形で多くのAndroidデバイスに存在する5ポジションのD-Padを使用して選択できるウィジェットを作成するプロセスについて説明します。 この記事は、彼の最初のAndroidのhello、worldをすでに作成している、訓練された読者を対象としています。 寒い季節に静電容量式スクリーンを備えたデバイスのハードウェアキーを管理する利点について話すべきではないので、すぐにビジネスに取り掛かりましょう。
ウィジェット構成ファイル
ウィジェットのwidget.xml構成ファイルから始めて、プロジェクトのres / xml /サブディレクトリに作成します。
<? xml version ="1.0" encoding ="utf-8" ? > <br> < appwidget-provider <br> xmlns:android ="http://schemas.android.com/apk/res/android" <br> android:minWidth ="72dip" <br> android:minHeight ="72dip" <br> android:focusable ="true" <br> android:updatePeriodMillis ="0" <br> android:initialLayout ="@layout/widget" /> <br><br> * This source code was highlighted with Source Code Highlighter .
属性android:minWidthおよびandroid:minHeightはウィジェットのサイズを担当し、android:updatePeriodMillisはウィジェットが更新される頻度を決定します。この特定の場合、更新する必要はありません。android:initialLayout-ウィジェットに使用されるActivityインターフェースを示します。 また、android:focusable属性にも関心があります。この属性は、その名前が示すように、ウィジェット要素へのカーソルのフォーカスを許可または禁止します。
ウィジェットのレイアウト
ウィジェットはアイコンとその下のキャプションで構成され、両方の要素がクリック可能で強調表示されます。
res / layout / widget.xml
<? xml version ="1.0" encoding ="utf-8" ? > <br> < LinearLayout <br> xmlns:android ="http://schemas.android.com/apk/res/android" <br> android:layout_width ="72dip" <br> android:layout_height ="72dip" <br> android:orientation ="vertical" > <br> < ImageView <br> android:id ="@+id/icon" <br> android:layout_width ="48dip" <br> android:layout_height ="48dip" <br> android:clickable ="true" <br> android:focusable ="true" <br> android:src ="@drawable/icon" <br> android:background ="@drawable/icon_background" <br> android:layout_gravity ="center" /> <br> < LinearLayout <br> android:id ="@+id/label" <br> xmlns:android ="http://schemas.android.com/apk/res/android" <br> android:layout_width ="wrap_content" <br> android:layout_height ="22dip" <br> android:orientation ="vertical" <br> android:clickable ="true" <br> android:focusable ="true" <br> android:background ="@drawable/label_background" <br> android:gravity ="center" > <br> < TextView <br> android:layout_width ="wrap_content" <br> android:layout_height ="wrap_content" <br> android:text ="@string/label" <br> android:textSize ="13sp" <br> android:textColor ="#ffffff" /> <br> </ LinearLayout > <br> </ LinearLayout > <br><br> * This source code was highlighted with Source Code Highlighter .
ここでは、Androidのアイコンと署名の背景属性に注意する価値があります。 ご想像のとおり、このパラメーターを使用すると、オブジェクトの背景に背景画像または色を配置できます。この場合、要素を強調表示するためのルールを記述するファイルを指します。
ハイライトルール
「ハイライトルール」 StateListDrawableと呼ばれる、状態に応じてオブジェクトの背景を変更するために使用されるツール。 ルールは項目タグに含まれています。属性android:state_focused(フォーカスされているオブジェクト)およびandroid:state_pressed(押されているオブジェクト)は、背景画像が設定される条件です。android:drawableは、背景として使用されるリソースを示します。
res / drawable / icon_background.xml
<? xml version ="1.0" encoding ="utf-8" ? > <br> < selector xmlns:android ="http://schemas.android.com/apk/res/android" > <br> < item <br> android:state_focused ="true" <br> android:state_pressed ="false" <br> android:drawable ="@drawable/icon_shadow" /> <br> < item <br> android:state_focused ="true" <br> android:state_pressed ="true" <br> android:drawable ="@drawable/icon_shadow" /> <br> < item <br> android:state_focused ="false" <br> android:state_pressed ="true" <br> android:drawable ="@drawable/icon_shadow" /> <br> </ selector > <br><br> * This source code was highlighted with Source Code Highlighter .
アイコンを強調表示するためのルールには、次のように記述できる3つのルールがあります。
- アイコンが強調表示されているが押されていない場合は強調表示します。
- ハイライトされて押された場合はハイライトします
- 押されても強調表示されない場合は強調表示します。
res / drawable / label_background.xml
<? xml version ="1.0" encoding ="utf-8" ? > <br> < selector xmlns:android ="http://schemas.android.com/apk/res/android" > <br> < item <br> android:state_focused ="true" <br> android:state_pressed ="false" <br> android:drawable ="@drawable/label_shadow" /> <br> < item <br> android:state_focused ="true" <br> android:state_pressed ="true" <br> android:drawable ="@drawable/label_shadow" /> <br> < item <br> android:state_focused ="false" <br> android:state_pressed ="true" <br> android:drawable ="@drawable/label_shadow" /> <br> < item android:drawable ="@drawable/label" /> <br> </ selector > <br><br> * This source code was highlighted with Source Code Highlighter .
署名の強調表示ルールは、デフォルトの背景画像を設定する条件のない4番目のルールを除き、実質的に同じです。
おわりに
ここで、リソースをres / drawableディレクトリに配置し、マニフェストを作成するだけです。
<? xml version ="1.0" encoding ="utf-8" ? > <br> < manifest <br> xmlns:android ="http://schemas.android.com/apk/res/android" <br> package ="org.selectdroid" <br> android:versionCode ="1" <br> android:versionName ="1.0" > <br> < application <br> android:icon ="@drawable/icon" <br> android:label ="@string/app_name" > <br> < receiver <br> android:name =".Widget" <br> android:label ="@string/app_name" > <br> < intent-filter > <br> < action android:name ="android.appwidget.action.APPWIDGET_UPDATE" /> <br> </ intent-filter > <br> < meta-data <br> android:name ="android.appwidget.provider" <br> android:resource ="@xml/widget" /> <br> </ receiver > <br> </ application > <br> </ manifest > <br><br> * This source code was highlighted with Source Code Highlighter .
コンパイルと起動後、次のウィジェットを取得します。
ご清聴ありがとうございました。 この記事が誰かに役立つことを願っています。
この記事を書くときは、 developer.android.comのドキュメントを使用しました 。
プロトタイプウィジェットのソースコードは、 ここからダウンロードできます 。
ここでコンパイルされたapk。