エミュレータに「MENU」ってボタンありますね


押されたときにどんなことするかを設定します


まずはメニュー

@Override
public boolean onCreateOptionsMenu(Menu menu)

こんな感じでOverrideします


そしたらmenuってオブジェクトにメニューを追加していきます。


menu.add(0,
MENU_ID1,
0,
getString(R.string.menu_next)).setIcon(android.R.drawable.ic_menu_crop);


上が自分作ってたソースです。

引数の詳細は

Menu.add(int groupId, int itemId, int order, CharSequence title)
groupId:グループのID
itemId: アイテムID
order: アイテムの順序
title: メニューに表示されるタイトル

だそうです。


気になるのがアイテムID

こいつはintらしいんだが、Menu.FIRSTとか入れるらしい

適当でいいのかな・・・



お次はボタンが押されたときの処理

@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
super.onPrepareOptionsMenu(menu);
return true;
}


trueを返せば表示して、falseを返せば表示しないんだって

不思議だね



お次はメニュー選択時の処理

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case MENU_ID1:
// ここに処理
break;
case MENU_ID2:
// ここに処理
break;
}
return super.onOptionsItemSelected(item);
}



やっぱり一画面でちまちまやりたくないよね


自分が参照した入門ページに画面を切り替える方法がのってました。


やりたいことはActivityクラスを2つ以上つくって、

一つ目のActivityから他のActivityを呼び出す

よばれたActivityからsetContentViewで画面を表示


んーなるほど


んでどうすればいいかというと、こうする


Intent intent = new Intent();

intent.setClassName(
            "mudai.co.jp",
            "mudai.co.jp.NextActivity");

startActivity(intent);


Intentってオブジェクトつくって、

そこにクラス情報、つまりこのActivityを呼びたいって設定します

それがsetClassName


一つ目の引数がパッケージ (そもそもこのパッケージってどんな意味があるんだ?)

二つ目がそのクラスです


そのあとstartActivityって関数で開始です

簡単ね


もちろんこのNextActivityってのがプロジェクトにあるのが前提


無題のAndroid入門中
こんなふうに



あとは上のコードがなんかしらのイベントで呼ばれるようにしましょー


リンクを張っただけでは後からぜんぜんわからないので、

キーの作り方を乗せます


まずSDK証明書のMD5を取得する

はい いみふです


でもすすみます


JDKのフォルダにkeytoolってのが入っているんで、

探してpathを通しておく 環境変数とかいじってね


ちなみに自分はcdで移動しただけど終わらせちゃった

環境変数とか怖いじゃんw


C:\Users\Hirofumi>cd "C:\Program Files (x86)\Java\jdk1.6.0_20\bin\


はい

Windows7ってことと、本名がヒロフミとばれましたが、次にいきます


今度はkeytoolを使ってMD5を取得

こうします


>keytool -list -keystore C:\Users\%USERNAME%\.android\debug.keystore


って打つとキーストアのパスワードを入力してくださいってでてきます

基本からのままenterで


そしたらこんなんなる


無題のAndroid入門中

この水色に塗ったところに大事な情報が出てきます べつに隠さなくてよかったか?


そしたらこのデータをもってGoogleさんに開発者ですよーって認めてもらいにいきます


Maps API Key Signup

http://code.google.com/intl/ja/android/add-ons/google-apis/maps-api-signup.html


ここにいったら下のなんとかagreeってのをチェックして、

さっきだしたデータをMaps API Key Signup欄に入れる


そしたら下にあるGenerate AP keyってのを押します



そしたらお目当てMapviewで使うキーが出てきますよー

よかった よかった

WindowsではメッセージボックスにOKってでますが、

AndoroidではAlertDialogをshowするだけではだめなようです。


めんどいですね


手順として、

まずAlertDailog.Builderのインスタンスを作ります


AlertDialog.Builder ab = new AlertDialog.Builder(this);


はい。これでabってインスタンスができました

ここまで今まで紹介したものです


そんでもってボタンをおきます

おきますっていっても、AlertDilogには最初からPositiveneutralnegativeってボタンが組み込まれているそうです


驚きですね


その中でPositiveボタンの設定

setPositiveButtonメソッドを例に説明します



ab.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});


"Yes"ってとこにはボタンに表示する文字

お次のnew DialogInterface~ってとこに処理を実装します


んでこれで何をやっているかというとdialog.cancel();ってとこでダイアログを消しています

エミュレータのボタンまでマウスを動かさなくてすみますね


無題のAndroid入門中

AlertDialog.Builderのほうが便利なので、ただのAlertDailogはいらないようです


めでたし めでたし



・・・とは納得できないか




ただのAlertDialogはインスタンスを生成することができなくて、

どうしても作るにはAlertDialog.Builderクラスのcreateメソッドを使うらしいです


へぇー


ということで今度からはAlertDialog.Builderを使おう


こんな感じでさ



AlertDialog.Builder ab = new AlertDialog.Builder(this);

ab.setMessage("hogehoge");

ab.show();



無題のAndroid入門中


この絵はボタンからAlertDialog表示させたイメージです

ImageViewです その名のとおり絵を貼り付けます


まず、main.xmlのLayout ViewsからImageViewを選び、黒いとこへ

そしたらImageViewてのが右下に出てきます


無題のAndroid入門中



次は表示させたい絵をプロジェクトに入れる

res/drawable-mdpi、 res/drawable-hdpi、 res/drawable-ldpiのどれか

どこに入れるかで解像度が変わるらしいだが、

よくわかってないよ


自分は例として こんな感じに



無題のAndroid入門中

こんなふうにres/drawable-mdpiにstart2.bmpって感じでいれてみた

入れ方はドラッグ&ドロップでok


これでリソースに表示させたい絵が入りました



次はActivityのほうにいって

先ほど定義したImageViewに絵を設定する


実はしっくりきてないんだが、とりあえずメモということでw



方法は今までのButtonの説明のように


ImageView image1 = new ImageView(this);
image1 = (ImageView)findViewById(R.id.image1);


とインスタンスつくって、それにmain.xmlで定義したidを割り当てる感じ

あくまで感じで    ・・・自分のイメージだからw


お次は


image1.setImageResource(R.drawable.star2);


setImageResourceってメソッド使って、

リソースにあるstar2って画像を設定するぞ


star2って名前は勝手についてた、

別に気にすることないでしょう



これで実行すれば絵がでます


無題のAndroid入門中  



しっくりこないのはいちいちActivtyから絵を設定しなくちゃいけないのかなーってとこ

main.xmlのImageView貼り付けたら、そこのPropertiesで絵が設定できるんじゃないの?思ってます



まーいずれわかるだろ



コード全文(Activity)

package jp.javadrive.button;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageView;

public class buttonActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ImageView image1 = new ImageView(this);
image1 = (ImageView)findViewById(R.id.image1);

image1.setImageResource(R.drawable.star2);
}
}





MapControllerにあったといわれるcenterMapToは

setCenterになりましたとさ


たぶんこの認識でいいのかな


mc.centerMapTo(p, false);


上の例ではmcってのがMapViewControllerで、

pってのがPoint型


これが新しいSDKになると


mc.setCenter(p);


ってなる

pはPoint型ではなくGeoPointです


第2引数のBooleanが消えているね

まぁ、なくなったAPIを気にする必要ないか(爆)



あと.zoomToってのもSetZoomってなってるから気をつけてくれ
使い方は大体同じ

mc.zoomTo(15);

mc.setZoom(15);

になっただけさー

はい

自分が入門中のページが古いだけですw


Point point = m.getMapCenter();


とするとエラーになって


GeoPoint point = m.getMapCenter();


ってすれば万事うまくいったよ



まーメッセージにそう書いてあるんで迷うことはないでしょう


XMLってのVBからしたらめんどいね うん


今回は今まで作ったMap表示アプリにボタンを追加する


まず、main.xmlのレイアウト画面からButtonを画面に配置

すると


無題のAndroid入門中


うん

かっこわるい


そこでButtonを横並びにしようと思って調べると、

どもLinearLayoutが活躍するらしい  (今までただの呪文だとおもってた・・・・)



自分がやったのは、まずmain.xmlのLayoutからLinearLayoutってのを配置


無題のAndroid入門中


左の赤く囲ったとこのアイコンをドラッグ&ドロップで黒いレイアウト画面に持っていく

そうすると右の赤く囲ったところみたいになる


ここでやりたいのはLinearLayoutの中にもうひとつLinearLayoutをつくるってこと

親LinearLayoutは縦並びにして、子LinearLayoutは横並びにする

そして子LinearLayoutにボタンを入れる   って感じ


無事追加できたらその子LinearLayoutを横並びにする

新しく追加したLinearLayout(上の絵の右にある赤囲い)を右クリックしてプロパティを表示


そしたらずらーーーーっていろんなのでるから

がんばってOrientationってのを選び、それをhorizontalにする


無題のAndroid入門中

これでこのLinearLayoutは横に並べますってなりました

めでたし


ここからはGUIのままでできるのかもしれませんが、

自分は知らないのでmain.xmlを開きます


新しく<LinearLayout android:id="@+id/LinearLayout01" ~

と横長ーく書いてくれてますので、ちょっと体裁を整えつつ、

そのLinearLayoutタグの中にButtonのタグを入れ込んできます


自分はこんな感じだわ


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android "
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">


<Button
android:text="@+id/Satellite"
android:id="@+id/satellite"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<Button
android:text="@+id/TrafficOn"
android:id="@+id/traffic"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="true"
android:clickable="true"
android:apiKey="0HPSzkVxcnHM1VOOhZbVbJ9ZZGPiL7mdJLU4MIg"
/>

</LinearLayout>


青い太文字が今回追加したとこ


イメージわかりますかねー

階層が変わるって感じです


第一階層()の下に第二階層()が入る感じですよ


意味違くねって思った人は    聞かなかったことに


でmain.xmlを保存してLayoutを見れば

無題のAndroid入門中

こうなります



レイアウトもVBみたいにぐりぐりいきませんね

んーめんどくさいw