カテゴリー別アーカイブ: アプリ開発

【Androidアプリ作成】TableLayoutでborder(罫線)をつける方法

昨日はTableLayoutの使い方という基本的なところを書きましたが、
今回は罫線について書きます。

Tableといえば、やはりborderがつけて表みたいに見せるのが本来の使い方なので
borderをつけいたいという需要は多いのではないでしょうか。

私も調べてみましたが、
なんとTableLayoutでは罫線をつけるためのborder関係のプロパティがありません!

でも、borderをなんとかしてつけたいと思い、下記のようなサンプルコードを用意しました。
昨日のフルーツテーブルに罫線がつけてみました。

概念としては、罫線をつけたい<TableRow>にbackground要素につけたい罫線の色を設定します。
その中身の要素(この場合<TextView>)にmarginを指定します。
指定したmarginの値が大きければ大きいほど、罫線が太くなるという寸法です。

フルーツテーブル改)
<TableLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TableRow

android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="1"

android:textColor="#FFFFFF"

android:background="#003366"

android:layout_weight="1"

android:gravity="center">

</TextView>

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="2"

android:textColor="#FFFFFF"

android:background="#003366"

android:layout_weight="1"

android:gravity="center">

</TextView>

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="3"

android:textColor="#FFFFFF"

android:background="#003366"

android:layout_weight="1"

android:gravity="center">

</TextView>

</TableRow>

<TableRow

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="#000000"

android:stretchColumns="*">

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="みかん"

android:textColor="#000000"

android:background="#FFFFFF"

android:layout_weight="1"

android:gravity="center"

android:layout_marginLeft="1dip"

android:layout_marginBottom="1dip">

</TextView>

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="りんご"

android:textColor="#000000"

android:background="#FFFFFF"

android:layout_weight="1"

android:gravity="center"

android:layout_marginLeft="1dip"

android:layout_marginRight="1dip"

android:layout_marginBottom="1dip">

</TextView>

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="メロン"

android:textColor="#000000"

android:background="#FFFFFF"

android:layout_weight="1"

android:gravity="center"

android:layout_marginRight="1dip"

android:layout_marginBottom="1dip">

</TextView>

</TableRow>
</TableLayout>

2011.7.20
神森 真昼

【Androidアプリ作成】TableLayoutの使い方

HTMLの<table>タグのようにAndroidでも組むことができます。
下記は私が作成したサンプルコードです。

うまく表示することができれば、
上段に1、2,3という数字が入り
下段にみかん、りんご、メロンが入ります。

<TableLayout>は<LinearLayout>を継承したクラスなので、
基本のプロパティは一緒です。

★タグの説明
<TableLayout>・・・HTMLでいう<table>のことです。
<TableRow>・・・HTMLでいう<tr>のことです。

え、<td>なるものはないんですか?
結論から申し上げますとありません。

その代わりに
<View>、<textView>、<Button>の要素を置くことで<td>を表現します。

サンプルコード:フルーツテーブル)

<TableLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TableRow

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="1"

android:layout_weight="1"

android:gravity="center">

</TextView>

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="2"

android:layout_weight="1"

android:gravity="center">

</TextView>

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="3"

android:layout_weight="1"

android:gravity="center">

</TextView>

</TableRow>

<TableRow

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="みかん"

android:layout_weight="1"

android:gravity="center">

</TextView>

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="りんご"

android:layout_weight="1"

android:gravity="center">

</TextView>

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="メロン"

android:layout_weight="1"

android:gravity="center">

</TextView>

</TableRow>

</TableLayout>

2011.7.19
神森 真昼

追伸:
全く関係のない話ですが、本日は一緒にアプリ開発を行なっている
ゲームプログラマーNECOの誕生日です。おめでとう!
・・・といっても特に何もプレゼントがないですが^^;

【Androidアプリ作成】HorizontalScrollViewの使い方

HorizontalScrollViewを使うと、横方向のスクロールが作れちゃいます。
例えばひたすら横に長い表や縦画面で見せたい横長画像などに最適です。

例)
<HorizontalScrollView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:fadingEdgeLength="25dip"
//横方向にまだコンテンツがあることを促すぼやかしの幅

android:layout_weight="1"
>

注意する点は横に長い場合はひたすらスクロールすればよいのですが、
横長でさらに縦にも長いコンテンツを扱う場合はこの方法だと縦にスクロールが適応されないことです。

さらに<HorizontalScrollView>の中に<Linearlayout>は1つしか使用できません。
正確には、

・な例)
<HorizontalScrollView>

<LinearLayout>

・・・

</LinearLayout>

<LinearLayout>

・・・

</LinearLayout>
</HorizontalScrollView>

<HorizontalScrollView>の直下に複数の<LinearLayout>が存在するため
表示がうまくいきません。

○な例)
<HorizontalScrollView>

<LinearLayout>

<LinearLayout>

・・・

</LinearLayout>

<LinearLayout>

・・・

</LinearLayout>

</LinearLayout>
</HorizontalScrollView>

複数の<LinearLayout>を使用する場合は1つの<LinearLayout>に入れて
入れ子構造にするとよいです。

2011.7.18
神森 真昼

【Androidアプリ作成】解像度の低い端末をサポート対象外にする方法

複数の端末に反映させたいのは作り手なら当然の思いですが、
あまりにも小さくてそもそも操作事態難しいアプリもあります。

そんなときはAndroidManifest.xmlに下記を記述します。

<supports-screens

android:smallScreens="false"

android:normalScreens="true"

android:largeScreens="true"

android:anyDensity="true" />

smallScreensにfalseと入れることで
「この端末では解像度が小さいディスプレイは対応してません」という意味になります。
AndroidMarketなどのマーケットでは、
ユーザー側でsmallScreensの対象となる端末が使用されている場合、このアプリは検索から除外されます。

では、どの解像度がどのscreens要素にあてはまるかはこちらのリンクを参照ください。

【 Android Developers 】
http://developer.android.com/intl/ja/guide/practices/screens_support.html
(このページの下の方に一覧表があります)

2011.7.9
神森 真昼

【Androidアプリ作成】解像度の違う端末に対応させるためには?

解像度の違う端末に対応させるためには、
res/layoutを解像度別に切って対応させるのが一番確実な方法です。

854*480の解像度に対応させたい場合
resの直下にlayout-800×480という名前のフォルダを作成し、それ用のXMLを入れます。

20110705_multidef1

複数の端末の解像度でシミュレーションするためには
エミュレータの設定をいじりましょう。

20110705_multidef2のようなアイコンを押すとエミュレータの設定画面が出ますので、
そこでNewを押して新規作成します。

20110705_multidef3

解像度やAndroidのバージョンなどが設定できます!

完了してすぐ実行してみたい人は設定したものを選んでStartを押して実行しましょう。

追記(2011.7.9)
フォルダを作って、指定したフォルダに調整したXMLを入れてみたけど動かない方は
AndroidManifest.xmlに下記のコードが記述されていないケースがあります。
動作しない場合はご確認ください。

<uses-sdk android:minSdkVersion=”3″ android:targetSdkVersion=”7″ />
<supports-screens

android:smallScreens=”true”

android:normalScreens=”true”

android:largeScreens=”true”

android:anyDensity=”true” />

miniSdkVesion : 対応させたい最小のAPI Level
targetSdkversion : 対応させたい最大のAPI Level

2011.7.5
神森 真昼

【Androidアプリ作成】Android解像別機種一覧表

続々とAndroidを搭載したスマートフォンが発表されるが、
解像度の違いに四苦八苦しそうです。
取り急ぎ解像度一覧表を作ってみました。
だいたいはこんな感じで他に見つけたらまたつけたしていきます。

【 480・800 】( 3 : 5 )
DELL Streak
GALAXY S
GALAXY S Ⅱ
GALAPAGOS
G'zONE
HTC EVO
HTC Desire HD
Libero
Optimus bright L07C
SIRIUS α (IS06)

【 240・320 】( 3 : 4)
GALAXY Mini
HTC Wildfire

【 320・480 】( 2 : 3 )
GALAXY Ace
Optimus chat
HTC Wildfire S

【 480・854 】(
9 :16 )
AQUOS PHONE THE HYBRID
IS05
MEDIAS
MEDIAS WP N06C
Motorola Droid X
REGZA Phone
Sweety
Xperia acro
Xperia arc
Xperia X10

【 540・960 】( 16 :9 )
AQUOS PHONE
INFOBAR A01

【 640・960 】( 2 : 3 )
IS03

【 768・1280 】( 3 : 5 )
Optimus Pad

【 600・1024 】
GALAXY Tab

2011.7.4
神森 真昼

Androidプロジェクト作成手順

20110704_pro

プロジェクトを新規作成し、Androidプロジェクトを選択すると上記のような画面が出る。

[ 入力する項目 ]
Project Name :任意の名前(最初に大文字にする)

Build Target: 対応したいバージョンのものを選択。

Properties:
Application name:任意の名前(ここに入れた名前で最終的にapkファイルが作られる)
Package name:任意のパッケージ名
Create Activity:任意のActivity名をつける。Android的なメインクラスを生成する。
Min SDK vertion:Build Targetで指定した最も古いバージョンのAPI Levelに合わせる。
この場合はAndroid2.1が一番古いので、7とする。

Finishを押して確定すればプロジェクト作成は完了です。

2011.7.5
神森 真昼

【Androidアプリ作成】エミュレータの起動を高速化する方法

Androidの開発を行う際に、手元にデバイスが無い場合は
emulatorを使って開発していくことになります。
開発は、トライアンドエラーを繰り返しながら行うことが多いので、
emulatorの起動が遅いと開発の効率も落ちてしまいます。
そんな時はスナップショットから起動することでemulatorの起動を高速化を期待できます。
以下の手順になります。

(1)スナップショット用のデバイスイメージを作る
・スナップショットを有効化
AVDのsnapshotをenabledにチェックを入れておきます。
・AVDのSD Cardの設定を最小限に設定
スナップショットのイメージサイズを少なくでき起動時のディスクIOを減らせます。
作成するアプリによりますが、10MBあれば大丈夫です。
・emulatorアプリケーションの管理から削除
消せるものは消しておきましょう。

(2)スナップショットを作成する
telnetでemulatorへアクセスし、スナップショットを作成できます
> telnet localhost 5554
$ avd snapshot save test

(3)スナップショットを指定して起動する
$ANDROID_HOME\tools\emulator.exe -scale 0.5 -no-boot-anim -no-snapshot-save -no-cache -memory 64 -snapshot test

私の環境下では、上記手順により今まで3分ほど要していた
emulatorの起動が20秒程度にまで短縮されました。
ご参考まで。

[参考] Android Emulator | Android Developers
http://developer.android.com/intl/ja/guide/developing/tools/emulator.html

2011.06.26
NECO

【Androidアプリ作成】シミュレータ画面を横表示に切り替える方法

次回作は横表示のアプリなのですが、
縦表示だと首曲げないといけないし、めんどくさいなぁと思ってやってたら、
「Ctrlキー+F12で横になるよ」とNECOに言われてしまいました。。

そうだったのか、知らなかった!!
ってか、首痛める前に早く教えてくれ!!

すぐショートカットを忘れてしまうので、備忘録に記載。。
皆さんも忘れたらここみてね、リファレンスにもリンクしておきます。。

2011.6.21
神森 真昼

【Androidアプリ作成】logcatを使って効率良くデバッグをしよう

こんにちは、NECOです。

Android開発を行う際、
変数の中身を確認したいことが多々あります。

昨今のIDEならば、ステップ実行を行えば
比較的簡単に確認できたりしますが、
やはりデバッグの基本はログ出力かと思います。

Javaの場合、以下のようなコードで
確認するのが一般的かと思われます。

System.out.println("Cat#eat food=" + food);

ですが、Androidでは標準出力や標準エラーといったものが
存在しません。

じゃあどうすればいいんだー!ってことで登場するのが、
「logcat」です。

logcatとは、Androidにはログを集めて表示する機能で、
adbのシェルから表示したりフィルタリングするといったことが行えます。

ログを出力する場合は、以下のようになります。

Log.d("CatLife", "Cat#eat food=" + food);

またログを見る場合は、Eclipseプラグインならば
DDMSパースペクティブのLogCatビューから確認できます。
以下のように出力されます。

06-18 19:00:19.128 D 2664 CatLife Cat#eat food=カルボナーラ

コマンドラインでlogcatでログ表示する場合は
事前にadbサーバーを起動しておきます。Eclipseを使った場合は裏で自動で起動してます。

> adb start-server

adbが起動できたら、次はクライアントのシェルを起動します

> adb shell

adbのシェル上からlogcatを起動します。

$ logcat

以上で行えます。
一連の流れをまとめて実行する場合は、以下のコマンドで行えます。

> adb -s [デバイス識別子] logcat

デバイス識別子は、以下のコマンドで確認できます。

> adb devices

ログを出力して効率よくデバッグを進めましょう。

[参考] logcat | Android Developers

http://developer.android.com/intl/ja/guide/developing/tools/logcat.html

2011.6.19
NECO