0年 0月 の投稿一覧

【Android開発】ウィジェットクラス

ウィジェットクラスは大きくわけて3つに分類されます。

ウィジェットクラス分類

  1. TextViewクラスを継承するもの

  2. Adapterクラスを継承するもの

  3. 上記以外でViewクラスを継承するもの

1.TextViewクラスを継承するウィジェット

TextViewクラスを継承する主要ウィジェックラス
(EditText・Button・CheckBox・RadioButton)

TextView

TextViewクラスは、ラベルとして出力専用で使用されます。
また、EditTextやButtonなどが継承する親クラスとしての役目をもちます。

EditText

EditTextクラスは、テキストボックスの表示または入出力を行うクラスです。

Button

Buttonクラスは、処理を実際に行うイベント処理用のクラスです。

Buttonクラスでよく使用するメソッド

メソッド 属性 概要
setTag(String) android:tag ボタンにタグを設定
setTag ボタンからタグを取得
setOnClickListener(Class) android:onClick ボタンにイベント処理を登録

※setOnClickListenerについて
登録するメソッドの指定方法が、xmlとコードの場合で異なる点に注意です。
xmlの場合、Activityを継承したクラスのメソッド名となり、コードの場合はView.onClickListenerを実装したクラス名になります。

CheckBox

その名の通り、checkBoxを表示するクラスです。
使用メソッドは以下の通りです。

メソッド 属性 概要
setChecke(boolean) android:checked チェック状態の設定
isChecked() チェック状態の取得
setOnCheckedChangeListener(Class) チェックイベント処理を登録

RadioButton

その名の通り、ラジオボタンを表示するクラスです。
使用メソッドは以下の通りです。

メソッド 属性 概要
check(int) 引数に指定したIDのボタンをチェック状態とする
clearCheck() 全てのチェックボタンを非チェック状態とする
getCheckedRadioButtonId() チェック状態のボタンのIDを取得する
setOnCheckedChangedListener(Class) チェックイベント処理を登録する

2.Adapterクラスを継承するウィジェット

AdapterViewクラスを継承するグループにはSpinnerクラス/GridViewクラス/ListViewクラスが存在。
自身のフィールドの表示に関するすべての属性はArrayAdapterやbaseAdapterを使用して行います。
Adapterにイメージや配列を持つことでリストやグリッドを表示する仕組みです。

  • Spinner
  • Spinnerは、ドロップダウンリストを表示するクラスです。
    アダプタとしてArrayAdapterを使用します。

    ArrayAdapterへのデータ登録方法(3種類)
    1.Arrayリソースを指定
    2.ArrayListクラスにリストデータを格納して指定
    3.ArrayAdapterのAddメソッドで直接追加

  • GridView
  • ListView

3.Viewクラスを継承するウィジェット

【Android開発】レイアウトクラス

レイアウトクラスはフレーム枠の画面位置や大きさ、およびウィジェットクラスの配置を決定するもので、レイアウトクラス同士は入れ子状態になっても問題はありません。
機能面ではViewGroupクラス/Viewクラスを継承するのでこの両クラスのメソッドを使用することができます。
TableLayoutクラスはLinearLayoutクラスを経由してViewGroupクラス/Viewクラスを継承し、ScrollViewクラスはFrameLayoutクラスを経由してViewGroupクラス/Viewクラスを継承します。
AbsoluteLayoutクラスはSDK1.5以降非推奨になっている為、ここでは割愛をしています。

LinearLayoutクラス

LinearLayoutクラスはUIオブジェクトを縦方向または横方向に順番に並べていきます。
LinearLayoutクラスの実装メソッドはsetOrientationメソッド/setGravityメソッドの2つだけです。

    • setOrientationメソッド

子の配置を設定します。
メソッドの引数、またレイアウトXML上での属性値は以下の表のようになります。

メソッド引数 属性値 概要
setOrientation.VERTICAL vertical 縦方向への配置
setOrientation.HORIZONTAL horizontal 横方向への配置
    • setGravityメソッド

子の配置位置やサイズ変更を設定します。
レイアウトエリアの横位置を左寄せ・中央揃え・右寄せ、縦位置を上揃え・中央揃え・下揃えを指定します。またサイズ変更は、幅や高さをレイアウト枠いっぱいに広げるかどうかの設定を行います。

レイアウト設定の一例を下図に掲載。

TableLayoutクラス

TableLayoutクラスは、UIオブジェクトをテーブルのマス目に配置します。
また、TableLayoutは行数のTableRowだけを集約し、列数の集約はTableRowが行います。

TableLayoutのメソッド/属性と概要

メソッド 属性値 概要
setColumnCollapsed android:collapseColumns 折り畳み
setColumnShrinkable android:shrinkColumns 幅縮小可の指定
setColumnStretchable android:stretchColumns 幅拡張可の指定

TableRowの属性と概要

属性 概要
android:layout_column 配置する列番号の指定
android:layout_span 占有する列数の指定

FrameLayoutクラス

FrameLayoutクラスは、1つだけのUIオブジェクトを格納するためのレイアウトクラスです。
1つのオブジェクトを他のオブジェクトとから独立させたい場合に使用します。

FrameLayoutクラスのメソッドと属性

メソッド 属性 概要
setForeground android:foreground 前景の設定
setForegroundGravity android:foregroundGravity 前景オブジェクトの配置方法

setForeground

前景設定となる為、追加するオブジェクトが背景よりもサイズが大きい場合FrameLayoutは前景だけの表示となります。
これは追加オブジェクトに対してオーバーレイした形で表示されることを意味しています。

setforegroundGravity

前景となるオブジェクトの配置方法を指定するメソッドです。
属性値は、以下の表の通りGravityの属性値と同じです。

setforegroundGravity属性値

配置パターン 属性値 概要
横方向の位置 left 左寄せ
right 右寄せ
center_horizontal 中央寄せ
縦方向の位置 top 上寄せ
bottom 下寄せ
center_vertical 中央寄せ
縦横一括 center 縦横中央寄せ
横幅合わせ fill_horizontal オブジェクトの幅をエリアいっぱいに合わせる
高さ合わせ fill_vertical オブジェクトの高さをエリアいっぱいに合わせる
縦横一括合わせ fill 横幅・高さをエリアいっぱいに合わせる

ScrollViewクラス/HorizontalScrollViewクラス

Android端末の縦幅・横幅を超えたレイアウトを実装したい場合に縦方向へのスクロール対応、横方向へのスクロール対応を行うことができます。
スクロール対応を行わず、実機の画面サイズを超過したレイアウトを設計した場合、画面からはみ出る部分での操作は不可能です。
また、スクロールさせたいエリアも自由に設定することができ、目的に応じてスクロールさせたいオブジェクトエリアの1つ上の階層にScrollViewタグを設定させてあげます。

ScrollViewタグ

縦方向へのスクロールを可能とする

HorizontalScrollViewタグ

横方向へのスクロールを可能とする

【Android開発】Viewクラス/ViewGroupクラス

Viewクラス

ViewクラスはすべてのUIクラスのベースとなるクラスです。
Viewクラスが提供するメソッドはUIクラスに共通するもので、JavaコードやLayoutリソースの中で使用されます。

Viewクラスのメソッドと概要一覧

メソッド 概要
setBackgroundColor 背景色の設定
setBackgroundResource Colorリソース指定による背景色設定
setId ID設定
getId ID取得
setTag タグ設定
getTag タグ取得
setOnClickListener クリックイベントメソッド登録
setClickable クリック可設定
setPadding 余白設定
setLayoutParams 幅、高さ設定
setVisibility 表示/非表示設定



ViewGroupクラス

ViewGroupクラスは、レイアウトやウィジェットを親子の関係に構造化するクラスです。主な機能としては、レイアウトやウィジェットを子として追加する機能や子とする際の位置決めを行う機能を実装しています。レイアウトクラスはこのViewGroupクラスを継承することでコンテナとしての機能をもつことができます。

Viewクラスのメソッドと概要一覧

メソッド 概要
setClipChildren 子の描画範囲設定
setClipToPadding Paddingを含む子の描画範囲設定
addView(View) 子の追加
addView(View,ViewGroup.LayOutParams) 子の追加(パラメータ付)
removeView 子の削除

setClipChildren

子の描画範囲の制限を設定するメソッド
引数にTrueをセットすることで親の枠内を超えた位置に子を配置することができないよう制限

setClipPadding

引数にTrueをセットすることで親のパディング内の位置に子を配置することができないよう制限

addView

子のUIオブジェクトを親に追加

removeView

子のUIオブジェクトを親から削除

【Android開発】XMLファイルで使用する単位についてのまとめ

Android開発のレイアウト設定では決まった単位を使用することになっています。
そこでAndroid開発で使用できる単位についてのまとめておきます。

 

単位 正式名称 概要
px pixels ピクセルをそのまま使用した単位
pt points 1/72インチを1にした単位
mm millimeters ミリメートル
in inches インチ
dp(dip) Density Independent Pixels 解像度に依存しない仮想的pixel
sp Scale Independent Pixels 指定フォントサイズに依存する仮想的pixel単位



上記単位を使用して表示するウィジェットの幅や高さを指定することができますが、
Androidでは以下の定数を使って表示領域を指定することが多いので合わせてまとめておきます。

定数 概要
fill_parent 親の幅や高さいっぱいにウィジェットを表示する
wrap_parent 表示する内容を包括するレベルで幅や高さを決定する
match_parent fill_parentと同様。API8以降にfill_parentからmatch_parentに呼称が変更

【Android開発】Android StudioでADB Shellを使用する為の設定

何かしら使用頻度があるADB Shell。
そんなADBコマンドをAndroid Studioで使用する為の設定方法です。

1.ADBプラグインをインストール

Android StudioにADBプラグインがインストールされていれば問題ありませんが、導入されていない場合は手動でインストールをする必要があります。

Android Studioの[ファイル(F)]-[設定(T)]から設定画面を起動して以下画面のように「プラグイン」を選択後、画面右の検索枠で「ADB IDEA」を入力して「リポジトリー内の検索」をクリックします。

「リポジトリー内の検索」リンクをクリックすると以下画面が起動するので、リスト内にある「ADB IDEA」を選択してインストールを進めます。

これでひとまずはAndroid Studio内でADBコマンドが使用できる環境が整いました。

2.ADBコマンドの使い方

実際にAndroid StudioでADBコマンドを利用する方法ですが、ADBコマンドの利用は「ターミナル」画面で行います。
下図Android Studio画面フッター部にあるターミナルボタンを押して起動するか、ALT+F12で起動することができます。

3. 基本的操作

だいたいADBコマンドを使用した時というのは直接にSQLiteのDBを操作したい時なので、その辺のコマンド入力を例として掲載します。

基本中の基本になりますが、ADBコマンドを利用する場合は必ずAVDマネージャーより仮想デバイスを起動させてください。

上図はDBにアクセスする準備までの一連のコマンド入力の流れです。

① adb devices
ADBコマンドで操作可能なデバイス一覧を表示する

② adb -s emulator-5554 shell
対象の仮想デバイスを指定してADBを起動する(この場合はemulator-5554の仮想デバイス)

③ run-as “Package名”
Package名がわからない場合はAndroidManifest.xmlを参照してpackage=”~”で記載されているパスを確認してください。

④ ls
ディレクト検索コマンド
結果表示として、cache、code_cache、databasesが表示

⑤ cd ./databases/
SQliteのDBを操作したいので、cdコマンドで/databasesディレクトリに移動する

⑥ ls
ここではdatabasesディレクト内情報を一覧表示します。
結果表示として、events.dbのデータベースが表示される。

⑦ sqlite3  events.db
データベースにアクセス

ここまでの一連コマンド入力でSQL操作ができる状態になります。
後は、目的に応じたSQLクエリをsqlite>に入力していくだけです。
※SQL分の最後には必ずセミコロン(;)をつけてください。

【Android開発】Call requires API Level XX (current min ~)の解決法

Androidアプリの開発をしているとよく見かけるエラー。

「Call requires API Level XX (current min ~)」

簡単に言ってしまえば、開発する環境に対して制作するアプリのAPIレベルの
最低サポートラインが違うことが原因。

では、どうするか・・・。

たいていは以下の方法で解決できます。

■ 解決方法その1

・AndroidManifest.xmlにAPI Minレベルを追加設定してあげる。

<uses-sdk android:minSdkVersion=”XX” />

例としてCall requires API Level 16 ~のエラーであれば、

<uses-sdk android:minSdkVersion=”16” />



■解決方法その2

・importの参照元を疑う

最新の技術を使う場合はある程度仕方ないことだが、基本的な機能を使用したい場合に開発環境(Android Stuidioなど)のバージョンが新しいことで古いAPIレベルがサポートされないのは非常に困ります。ただ、以前の開発環境では問題なかったなどのケースの場合は、使用したいクラスに関するimport情報を確認してみてください。

例として、カレンダー機能を使ったアプリの実装を考えた場合に最新のAndroid StudioのバージョンでCalendarクラスやGregorianクラスなどを使用するケースではimport内の参照元が以下のようになってしまいます。

import android.icu.util.Calendar
import android.icu.util.GregorianCalendar

これだと、確かにAPIレベル24が最低サポートの対象になってしまいそれ以前のAPIレベルではサポートされなくなってしまいます。
この場合は、以下のように参照元を変更することで解決します。

import java.util.Calendar
import java.util.GregorianCalendar

この参照元に変更することでAPIレベルが15でも16でもサポート対象となりCalendarクラス内のメソッドも使用することが可能になります。

基本は、解決方法その1で記載した内容で対処するのが通常ですが、開発環境が最新過ぎてアプリの対象範囲が極端に狭まるようなら解決方法その2で疑ってみるのもひとつの手です。
それでもダメなら別の方法で実装機能を模索するしかないでしょう。