2010年06月08日

[Android] HTC Desireの購入

日本時間では6/8の2:00、アメリカでWWDCが始まる頃、HTC Desireを購入しました。
購入したのは http://1shopmobile.com/ というサイトから。
海外のSIMフリー版を購入しました。

日本でも在庫が潤沢にあれば、おそらくSIMフリー版を購入することはなかったと思います。
しかし、発売から1ヶ月以上経つのに、全然買える気配がありません。
また、日本で発売されている(いた)HTC Desireは、SIMロックがかかっており、かつ、そのSIMを抜いてしまうと3Gはおろか、Wi-Fiまでもつながらなくなるというではないですか。

さらに日本で購入するには一度契約を結ばなければなりません(たぶん)。
その契約がややこしくて、どのプランを選ぶと2年縛りがつくのか、端末購入時に必須のオプションがあるのか、等さっぱりわかりません。
(というか、調べるのがとてもめんどうでした)


そういったこともあり、比較的自由そうな海外版HTC Desireを購入することに決めました。


ただ、海外版を購入するうえで不安がなかったわけではありません。
まずこういった海外からの買い物が初めてという点。
サイトが本当に信頼できるサイトなのかどうかも、イマイチわかりません。
(それでも利用者がいるらしいことくらいは調べましたが)。

端末が故障した時のことを考えても不安です。
日本で購入して、日本で故障すれば、ソフトバンクショップへ持っていけば何とかなりそうですが、海外から購入したものが故障した場合、どうすれば良いのでしょう。
(ここは半分壊れたら仕方ないとあきらめるつもりで購入しました)。

あと海外版と日本のもので、サポートが違ったらどうしよう、というようなこと。
日本語がサポートされてなかったらどうしよう、とか。
Android 2.2(Froyo)へのアップデートに差があったらどうしよう、とか。
(でも、この辺はきっと大丈夫だと思っています。端末の中身はさして変わらんでしょう)。


そんなこんなを乗り越えて、ポチっと購入しました。
価格は本体$575 + 送料$25でちょうど$600でした。
他の輸入代行のサイトよりもかなり安い気がします。
購入にはGoogle Checkoutを使いました。
1回日本語で住所登録をしていたのですが、このサイトでは英語表記でないとダメなようです。
英語表記の住所なんてわからないので、いろいろ検索しましたよ。
配送先を追加登録し、注文しました。
簡単でした。


このサイトのFAQによると2日〜5日ほどで届くそうです。
海外から発送すると思うのですが、ずいぶんと早く届くのですね。
ちゃんと届いて信頼出来そうだと感じたら、また注文しても良いかもしれません。
Milestoneとかキーボードが付いた端末も欲しいですし。

まずは数日間、ワクテカしながら届くのを待ちたいと思います。
posted by t2low at 03:34| Android

2010年06月06日

[Android] ソースのダウンロード

先日、Androidのソースをダウンロードしました。
ソース自体はときどきWebで見ていたのですが、やはりAndroid開発者ならダウンロードしておくべきな(?)のかな、と。

ダウンロードに関してはちょっと入り口の敷居が高い印象でした。
特にgitを使う点がダウンロードを延び延びにしていた最大の理由です。
僕は主にWindowsを使っているのですが、インターネットで調べてみるとWindows用のgitは、他の環境(Linux、Macなど)と比べると微妙な印象でした(単なる個人的な印象なので、実際は同等程度にはちゃんとしてるのかもしれません)。
何でもそうですが、僕は紹介文に「少し微妙な部分がある」と書かれていると、躊躇してしまうたちなのです。
そうは言ってもAndroidのソースにたどり着くにはgitを使わなければなりません。
ちょっとがんばってダウンロードを始めることにしました。

まずはgitを用意します。
いくつか種類があるようでしたが、cygwinのものを使うことに決めました。
cygwinもインストールしていなかったので、まずはcygwinからインストールしました。
cygwinのインストールはインストーラがあるので簡単です。
ただ、どれが必要なファイルか分からないので、何度も繰り返しsetup.exeを叩くことになりました。
基本的にはダウンロード方法が書かれたサイトを参考に進めていったのですが、必要なソフトウェアはコマンドを叩いて足りないと言われる度に追加していきました(サイトには必要なコマンドも書いてありましたが、最初に準備するのがめんどくさかったのです)。
curlなんてない、pythonがが足りない、と何度も怒られました。
不思議なのはgitのコマンドを一度も叩かなかったことです…。
スクリプトファイルをダウンロードしていたようなので、その中で使われていたのでしょうか。
まぁ、最終的にソースは取得できたのでヨシとします。

サイトに書かれていた通りに手順を実行していきました(詳細な手順はその他サイトをご確認ください)。
最後にrepo syncを実行!
ダウンロード開始です。
当初、30分くらいで終わるだろうか、と考えていました。
夜中の2:00少し前から始めて3:00を回ったあたりで50%程度。
起きているのは無理そうなので、そのまま放置して寝ることにしました。
翌日起きてみると、どうやらエラーなど出ずに完了したようでした。
ファイルの最終更新日は5:28、3時間半もかかった計算です。
ネットブックで実行したからというのもあるかも知れません。
Makefileなどもありました。
ソースさえ読めれば良いので、コンパイルするつもりはとりあえずありませんが。

敷居が高いかと考えてましたが、実際やってみると結構簡単でした。
自分で手順もまとめられると良いのですが、僕自身もサイトの情報通りにやっただけなので、まとめるとしてももっと分かってからにしたいと思います。
いやー、自分のPCにAndroidのソースがあるって心強い!
Android開発者の方は是非ダウンロードしておく事をお勧めします。


参考にさせていただいたサイト:
「逆引きAndroid入門 Androidソースコードをダウンロード・ビルドするには」
http://www.adakoda.com/android/000118.html
posted by t2low at 11:21| Android

2010年04月10日

[Android] TabActivityのタブをスライドさせられないか

Androidを触ったことのある方ならTabActivityという便利なものをご存知かと思います。
TabActivityとは、複数のアクティビティを1つの画面にまとめて、タブで管理してくれるものです。
大変素晴らしいと思います。

ただ、タブが表示される幅は固定のようで、あまり多くタブを作ってしまうと1つ1つのタブが縮小されていってしまいます。
そのため、いくつもいくつもActivityを追加できません。
また、タブの部分に横幅の広いもの(長いテキストとか)を設定したい場合も見た目的になかなか納得いかない状況に陥ったりすることがあると思います。

そんなとき、タブのエリアだけ左右にスクロールできないかな?と考えました。
Googleさんのことですので、きっとそんな機能を提供するためのプロパティがあるはずだ、と。
きっと setなんとかかんとか(true); とかするだけで、スクロール対応するはずだ、と。
で、ちょっと調べてみたのですが、なさそうでした…。

本当に機能がないのか調べるためにTabHostとかTabWidgetのソースも見てみました。
ざっくりとは↓こんな感じの構造っぽいです(本当にざっくりです)。

TabActivity
└TabHost
 ├TabWidget … タブの部分
 └各Activity

で、TabWidgetが何者かと言いますと、LinearLayoutを継承したクラスになっていました。
なので、横にタブが並ぶわけですね。
TabWigetの親ViewがHorizontalScrollViewなら左右にスクロールしてくれるのですが、TabWigetの親ViewはTabHost。
残念ながらTabHostはFrameLayoutを継承していて、HorizontalScrollViewではないので、左右へのスクロールはしない、ということが分かりました。
(確認はSDK1.6のソースで行いました)


ま、ここで誰もが思いつくと思います。
「それなら、HorizontalScrollViewを足せばいんじゃね」ということです。
つまり↓こういうこと。

TabActivity
└TabHost
 ├HorizontalScrollView
 │└TabWidget … タブの部分
 └各Activity

TabWidgetとTabHostの間にHorizontalScrollViewを挟んでしまえば良いのではないかと。
実際に試してみたらできました。あっさりと。

scrolltab1.png scrolltab2.png

今回は動きさえ確認できれば良かったので、文字しか設定していません。
標準の文字だけを表示するタブは、こんな状況を想定していない(だろう)せいか、文字の左右にスペースがなくて、だいぶカッコ悪いことになってますね。
ちゃんとしたものを作ろうと思ったら、自分でつくったViewを設定した方が良さそうです。
(TabSpecのsetIndicator()にはViewも設定できますし)

タブの部分を潰さずにスクロール表示したいって需要はあんまりないのかな。
↓いつも通り確認に使用したサンプルを置いておきます。
ScrollTabActivity.zip
posted by t2low at 23:32| Android

2010年03月31日

[Android] ListView内の各Viewのインスタンス

前回ListViewのサンプルを作成してから、一つ気になっていたことがありました。
ListViewの中のViewのインスタンスは使いまわされると書きながらも、そういえば自分では確認していなかったな、と。

そこで前回のサンプルにViewが生成される度にインクリメントされる変数を用意して実際にViewがどのように利用されているか確認してみました。

listview_sample3.png listview_sample4.png

Viewのインスタンス番号はListViewの各行の一番左側に表示されているものになります。
実際に確認してみて予想外だったのは、最初に作られていくときは昇順に並ぶだろうと思っていたことです。
画像を見てもらうとわかるように、Viewの順序はバラバラです。
またスクロールするたびに順序はさらにバラバラになります。
本当に使いまわされていたんですね。

ということは、ListAdapterのgetView()では必ず正確な値を詰め直してListViewに返してやらなければなりません。
職場で文字がスクロールするTextViewを作って置いたとき、関係のないセルのテキストまでスクロールしていたのですが、それはこのことを知らずに文字列だけを設定していてスクロール値は放置していたからでした。

やっぱりわからないことは自分で確認するのが良いですね。
確認に使用したサンプルは↓コチラになります。
ListViewTest.ViewInstance.zip
posted by t2low at 00:44| Android

2010年03月25日

[Android] 簡単なListViewのサンプル

AndroidのListViewがだんだんとわかってきました。

ListViewを使ったアプリを作っていて困ったのは、関係ないはずのセルに別のセルのデータが表示されることでした。
いろいろといじっていてわかったのですが、ListViewの中に表示される各Viewは、アイテムの数だけ生成されるわけではないのですね。
一度に表示されるViewの数だけ生成して、その後はそのViewを使い回しているようです。
(動作としてはそんな感じでしたが、実際はもっと複雑なのかも)
携帯機という限られたメモリの中でやりくりするには、確かにこの方法が良いのでしょうね。

さてさて、そんなこともあり、おさらいの意味も込めて、簡単なListViewのサンプルを作ってみました。

やっていることは、↓こんな感じ。
・リストが空の時は「no data.」と表示する。
・ボタンを押すごとにアイテムを増やす。
・ArrayAdapterを継承したクラスを作って、自分で中身を描画する。

listview_sample1.png listview_sample2.png

ListViewで中の各セルを自由に描画したいと思ったら、ListAdapterを継承する必要があるわけですが、そのときにベースにするのは「BaseAdapter」か「ArrayAdapter」だと思います。
「BaseAdapter」だと4つくらいメソッドを実装する必要がありますが、ArrayAdapterはコンストラクタとせいぜいgetView()というメソッドだけ。
簡単に作るならArrayAdapterで良いのかな、と思います。

今回のサンプルではやっていませんが、巷のサンプルコードでは生成されたViewの中の情報を表示する各View(例えばImageViewとかTextViewなど)をHolderというようなクラスを作って保持していることがあります。
Viewが使いまわされることが決まっているのであれば、何度もfindViewById()を行わなくて済むので効率的ですね。
ただ、そのHolderをViewのsetTag()で保持しているのが、個人的になんとなく納得いかないのです。
気になる方は違いを比較してみるのも良いと思います。

考えてみたら、記事内にコードを書かずに解説するというのは微妙ですね。
サンプルを置いてあるとはいえ、ダンロードして展開してソースを見るというのは手間ですしね…。
今後の記事の書き方は変えた方が良いかもしれませんね…。

とりあえず、↓いつものようにサンプルです。
ListViewTest.zip
posted by t2low at 03:29| Android

2010年03月11日

[Android] ListViewとFooterView (その2)

先日、ListViewとFooterViewについて書きました。
あれからFooterViewを使ったり、調べてみたりしたのですが、
結果、使いにくい!という結論に至りました。
その最大の原因は、FooterViewはListViewにセットするのに
結果的には自動でAdapterの方へ組み込まれる点です。

例えば、20個の配列を持ったArrayAdapterがあるとします。
ListViewに対してFooterViewを1つ組み込んだ後、そのArrayAdapterを組み込みます。
この後でListViewに対して、getCount()を行うと…21が返されます。
FooterViewの分がリストに足されたわけです。
では、このArrayAdapterのインスタンスをListViewにセットしたのとは別に持っていたとします。
このArrayAdapterにgetCount()を行うと…20が返されます…。
すでにこの時点でめんどくさいですが、さらにめんどくさいことが1つ。
ListViewにgetAdapter()をして取得したAdapterに対してgetCount()を行うと…
不思議なことに21が返されます…。

どういうことかと言いますと、FooterView(HeaderViewでも)をListViewに設定していると、
セットしたAdapterはHeaderViewListAdapterにラップされてしまうのです。
セットしたときはArrayAdapterだったのに、ゲットしてきたらHeaderViewListAdapterに
なっていたということがおきます。
ここでめんどくさいのは、FooterViewなどをセットしていないListViewでは
ラップされずにそのままのAdapterが取得できる点です。
FooterViewを出したり、隠したりするようなプログラムだと、
リストの数は変わるわ、インスタンスさえも変わるわで、いろいろとめんどいです。

職場でFooterViewの存在に気づいたときは、こんなに厄介なものだとは気づかずに
「標準で機能が提供されているならこちらを使おう」と思って、
コードを書き換えたのですが、結局のところは元のままの方がよかったです。
僕ならAdapterの中にFooterViewの機能を入れるんですけどねぇ…。

楽しみにされている方がいるかどうかはわかりませんが、今回はサンプルはありません。
FooterViewについて愚痴りたかっただけでございます。

posted by t2low at 01:29| Android

2010年03月10日

[Android] AsyncTask

職場の同僚がAsyncTaskで困っていたようなので、簡単なサンプルを作ってみました。

サンプルでやっていることは、

(1) (ボタンを押したら)AsyncTaskを実行
(2) 開始時刻を表示
(3) ボタンを非活性にする

asynctask1.png

(4) AyncTaskが終わるまで待つ
(5) (終わったら)終了時刻を表示
(6) ボタンを活性化する

asynctask2.png

これだけです。
ボタンの活性・非活性を、プログレスバーの表示・非表示に変えると見た目的にもよくなるでしょう。
たいしたことはしていないので、たぶんサンプルを見てもらった方が早いと思います。

↓いつものようにサンプル置いておきます。
ASyncTaskSample.zip
posted by t2low at 01:57| Android

2010年03月03日

[Android] ListViewとFooterView

最近、リストの末尾に「もっと読む」とか「さらに表示」とか書かれたUIがよくありますね。
「Load more」とか「Read more」とか英語で書かれている場合もあります。
たいていクリックしたり表示したりすることで続きを読み込むようになっています。
Androidのアプリでもよく見かけるので、少し前にどう実現しているのか考えていました。

最初に思いついたのは、Adapterを継承して末尾に自分で「もっと読む」を表示したViewを追加することです。
getCount()をオーバーライドして通常より1つ多めの数を返却するようにし、
getView()でpositionが末尾のときだけ別のViewを返すようにしてやれば実現できるだろうと推測しました。
実際やってみたらできました。
最初のうちはエラーなんかも出ましたが、何度も実装を見直しているうちに
なかなかちゃんと動くものになってきました。

ここで一つ大きな過ちをしでかしていたことに気づきました。
それは元々その機能が提供されているか考えなかったことです。
ご察しの通り、AndroidにはそういったUIを実現するための機能がありました。

それがFooterViewです。
使い方は簡単で、ListViewのsetFooterView()で表示したいViewを指定するだけ。
ただ、FooterViewはAdapterをセットする前に設定しないと表示されないようですね。
onItemClick()では、リストの末尾のpositionより1大きな数がpositionとして通知されるようです。

readmore.png

同様にHeaderViewというものもありましたが、こちらは試していません。
positionがどうズレるのか少し気になりますね。

ガガガっと書いたのでいろいろ不具合がありそうなサンプルは↓こちら。
ReadMoreListViewTest.zip
posted by t2low at 00:17| Android

2010年02月28日

[Android] ListViewのEmptyView

前から使い方がイマイチよくわかっていなかったものがありました。
ListViewのEmptyViewです。
リストの中身が空だった場合に表示してくれる代わりのViewなハズなんですが、結構前に本のサンプル通り書いたつもりが表示されなかったりして、よくわからないままになってました。

サンプルに載っていたのは、xmlでListViewを書くときに、idにandroid:list(でしたっけ?)を指定して、別のViewのidにandroid:emptyを指定するというものだったと思います。
ちゃんと書いたつもりだったのですが、リストが0件のときも何も表示されませんでした。

最近、setEmptyView()というメソッドがあることを知ったので、もう一度チャレンジしてみました。
引数がViewだったので、LayoutInflaterでxmlから生成したViewを設定してみたのですが、これもうまくいかず…。
次にxmlのListViewと同じレベルに別のViewを書いてみて、findViewById()で取得したViewを設定してみました。
なんと、こちらはちゃんと動きました。

ちゃんと調べたわけではないですが、EmptyViewというのはListViewと切り替えて表示されるViewのような気がします。
動き的にはそれぞれのsetVisibility()で切り替えられているだけ、のような印象を受けました。
なので、同じレイアウトの中に入っていないと切り替えられても表示されないということだったのではないかと。
LayoutInflaterで生成したViewが表示されないのも、これなら納得できます。
昔、サンプルコードがうまく動かなかったのは、もしかしたらListActivityを使わなきゃいけなかったのかな、と今更思ってみたり。


今回はサンプルはありません。
近いうちにまたListViewのことを取り上げる予定なので、その時のサンプルにEmptyViewのことも入れられれば入れてみたいと思います。
posted by t2low at 01:29| Android

2010年02月22日

[Android] Selectorについて

Selectorというのは、簡単に説明すると、状態に応じて画像や色を自動的に選択してくれる機能です。
Android標準のボタンもSelectorによって出来ています(と思います)。
たぶん標準のボタンのセレクタは↓このxmlではないですかね。

SDKのディレクトリ\platforms\android-1.6\data\res\drawable\btn_default.xml

中を見てみるとごちゃごちゃ書いてあります。
書かれている内容は、どの状態のときにどの画像を使うか、ということのようです。
仕様書を読んでいないので、xmlを読んだ感じや、アプリを動かしてみた感じですが、

・有効時
 「通常」「押下時」「選択時」
・無効時
 「通常」「選択時」

のそれぞれの画像を選択しているっぽいです。

いろいろ試してみたいと思い、今回ボタンとチェックボックスの画像、
あと文字色を書き換えてみました。
↓こんな感じ。
selector.png
手書き風です。
スクリーンショットは一番下の無効なチェックボックスが選択されている状態ですね。
コーディングせずにこんなことが実現できるなんてAndroidってすごいすね。
今回は自分でxmlも書き直したのですが、実際に使うときには、
SDKの↑のxmlをコピーしてきて画像の部分だけ書き換えるのが楽そうです。

まだチェックボックスの画像と文字が重なってたり、
文字色の方については意図した色にならなかったりしていますが、
そのへんはおいおい調べていきたいと思います。

今回のサンプルは↓こちら。
SelectorTest.zip
posted by t2low at 20:02| Android

2010年02月16日

[Android] LinearLayoutとweightとweightSum

今日、職場でLinearLayoutにweightSumなる属性があるということを教えてもらいました。
LinearLayoutの子要素でlayout_weightという属性が使えることは知っていたのですが、まさか親要素に合計値を設定する箇所があったとは。
ということで、いろいろと値を変えて試してみました。

weight_test.png

・weightSumを設定しないと単純に子要素のlayout_weightの合計値がweightSumとして扱われるような感じっぽいですね。

・weightSumが子要素の合計値よりも大きい場合は余白が生まれるようです。
 ただ、weightSumとlayoutWeightの割合が正しく画面上に反映されるわけではないようです。

・weightSumが設定されていない場合で、それぞれのlayout_weightの値が同じ場合は等分されますが、差がある場合はそれぞれ設定された割合(に近い)感じで分割されるようです。

・小数点で指定しても、割合が同じなら整数と同じように分割されるようです。

・設定したweightSumを超えるようなlayout_weightを設定しても問題ないようです。weigtSumが設定されていない時と同じように分割される(のかな?)ようです。

こんなにいろいろ試してみるほど複雑な要素ではなかったですね。

一応↓に今回確認に使ったサンプルを置いておきます。
WeightTest.zip

posted by t2low at 23:18| Android

2010年02月15日

[Android] 疑問

疑問1
独自にViewを作成し、そのViewはXMLからも利用できるものとする。
その中で他のViewを参照する属性を持つ。
このとき、親子関係がないViewが参照されていたら、どのようにしてこのViewは指定されたViewを見つけたらよいのか。
→findViewById()では子どもしか探さない(たぶん)。

疑問2
RelativeLayoutとLinearLayoutをそれぞれ指定したとき、子要素で使える属性の種類が変わる。
子要素となる各Viewにはおそらくそのような属性を参照する機能はないだろうから、親である〜Layoutが利用している属性だと推測するが、どのようにして参照しているのか。


まだまだ知らないことがたくさんあるなぁ。
posted by t2low at 00:48| Android

2010年02月06日

[Android] NinePatchImage

AndroidにはNinePatchImageというものがあるようです。
適当に訳すと「9つのつぎはぎ画像」という感じでしょうか。
四隅以外を伸ばしたり縮めたりして拡大縮小させる画像です。
見てもらった方が早いかと思いますけど。
どうやらそれを自分で作ることができるようなので、適当に作ってみました。

1.まずは画像を用意します。で、PNGフォーマットで保存します。
100206a.png

2.Android SDKのtoolsの中からdraw9patchを起動します。

3.さっきの画像を開きます。

4.伸びても良い部分を黒く塗ります。塗れるのは画像の端だけのようです。ツールの下にある「Show patches」にチェックを入れておくとわかりやすいと思います。
100206b.png

5.編集が完了したら保存します。そのときxxxx.9.pngという名前にする必要があるっぽいです。

これでNinePatchImageとしては完成です(たぶん)。


そして、実際にこれをどう使うかというと、普通にリソースとして使えば良いようですね。
Buttonのbackgroundに指定して適当に拡大させるとこんな感じになります。
100206c.png

これは何かと使えそうな気がしますな。
↓確認に使ったサンプルはこちら。
NinePatchImageTest.zip


参考:
http://www.taosoftware.co.jp/blog/2009/04/android_nine_patch9patch.html

posted by t2low at 23:50| Android

2010年02月05日

[Android] ActivityGroup

昨日のサンプルプログラムと、普段のActivity起動との違いは、
LocalActivityManagerのstartActivity()を使うくらいなので、
もしかしたら、別のアプリも内包できちゃうのかしら?
と思ってブラウザ起動するIntentを作って入れてみたが、
なんかプロセスが違うって怒られた。

まぁ、予想はしていたけど。
posted by t2low at 02:31| Android

2010年02月04日

[Android] ActivityGroup

Androidは基本的に1画面:1Activity。
ただ、Activityの中にActivityを入れたいこともあると思うのですよ。
TabActivityなんかでタブを使ったときにはActivityを内包することができるのがわかっていたので、自前でもできるんじゃないかと。

結論としては、ActivityGroupを継承したクラスを使ったらでけました。
ActivityGroupもActivityを継承しているので、普通にActivityとして使えます。
んで、内包したいActivityは、getLocalActivityManager()で取得したLocalActivityManagerのstartActivity()を使います。
Intentなんかは普通にActivityを起動させるときと同じです。
startActivity()でWindowクラスが返されます。
そのgetDecorView()で取得できるViewを適当なLayoutにでもaddView()しましょう。
Activityの中にActivityが入っているような見た目を実現できます。

自分としては動いたのでとりあえずは満足です。
ただ、動いたってだけなので、いろいろ必要な処理が抜けているかもしれません。

↓なんとか動いたサンプルはこちら
ActivityGroupTest.zip
posted by t2low at 00:25| Android

2010年02月02日

[Android] ActivityGroupを調べ中。

ActivityGroupを調べ中です。
LocalActivityManagerのstartActivity()でTabActivityみたいなことができるかと思ったけど、なんか例外発生しとる…。

続きは明日にします。
posted by t2low at 01:38| Android

2010年02月01日

[Android] Backキーの無効化

Backキーの無効化は、インターネッツを調べたらすぐに見つかった。
dispatchKeyEvent()でtrueを返すだけなのね。

↓確認に使ったサンプル。
BackKeyTest.zip
posted by t2low at 01:07| Android

2010年01月31日

[Android] LayoutInflater

Androidではxmlで書いた画面を読み込むことができます。
そのときに利用するのがLayoutInflaterのようです。

LayoutInflaterは以下のようにして取得できます。

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

inflate()を使用することで任意のレイアウトが書かれたxmlをViewとして読み込んでくれるようです。

View v = inflater.inflate(R.layout.xxx, null);

適当にこれをaddViewするなりすれば表示できます。

↓Viewの切り替えでタブっぽい動きをするサンプル。
ViewChangeTest.zip※追記
posted by t2low at 00:15| Android