Buttonはイベント!っていうVBゆとりまるだしです


Androidではリスナーを登録っていうらしいですね へぇ~


使い方はまずレイアウトでButtonを追加します

main.xmlを開いて


<Button android:text="@+id/satellite"
android:id="@+id/satellite"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>


こんな感じで追記する

satelliteってのは自分でわかるように名づけて


あるいはGUIでButtonを配置する


無題のAndroid入門中



こんな感じで

赤い囲いのところを押せば上みたいな画面になるよ


あとはActivityの編集でイベント(っていっちゃだめか)を書きます


まずはOnClickListenerをActivityに内包します(たぶん意味違う)

とりあえずおきまりということでActivityのとこをこうします


public class MapView_Activity extends MapActivity implements OnClickListener


MapView_Acitivityってのは自分が新しく作ったActivity

MapActivityを継承しています

そしてその横のimplements OnClickListenerってのをつけます


そうすると
View.OnClickListener.onClick(View) を実装する必要があります っていわれます

なんでこのonClickをクラス内に実装します


public void onClick(View v)
{

  //ここに処理
}


これでひとまずok



次はmain.xmlでレイアウトしたButtonから処理が始まるようにする

こんな感じ


buttonSatellite = (Button)findViewById(R.id.satellite);
buttonSatellite.setOnClickListener(this);


buttonSatelliteってのはこのクラスのメンバ変数です

レイアウトしたButtonのID(ここではsatellite)をButtonビューに割り当てるかんじでしょうか イメージ的に


そして先ほど実装したonClickに処理を書き込んできます


自分はこんな感じです


public void onClick(View v)
{

if( v == buttonSatellite )
{
if( m.isSatellite() )
{
buttonSatellite.setText("Satellite On");
m.setSatellite(false);
}
else
{
buttonSatellite.setText("Satellite Off");
m.setSatellite(true);
}
}
}


引数のvに定義したButtonビューが入る

それをif分で分岐して、処理を入れ込んでく

ボタンを追加したらelseifとかswitchで処理を追加できそうですね



結果、ちゃんとボタンのイベントが発生させられましたー

VBみたいにダブルクリックでちょいちょいでおわりませんね


無題のAndroid入門中

Satellite Onボタンを押すと


無題のAndroid入門中



うん

すばらしい


むだなところあるけど以下がそれ


package mudai.co.jp;

import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.os.Bundle;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.view.View.OnClickListener;


public class MapView_Activity extends MapActivity implements OnClickListener
{
// private final int FP = ViewGroup.LayoutParams.FILL_PARENT;
// private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;

private MapView m;

private Button buttonSatellite;
@Override public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);

m = (MapView)findViewById(R.id.mapview);


buttonSatellite = (Button)findViewById(R.id.satellite);
buttonSatellite.setOnClickListener(this);

}

private LinearLayout.LayoutParams createParam(int w, int h)
{
return new LinearLayout.LayoutParams(w, h);
}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

public void onClick(View v)
{

if( v == buttonSatellite )
{
if( m.isSatellite() )
{
buttonSatellite.setText("Satellite On");
m.setSatellite(false);
}
else
{
buttonSatellite.setText("Satellite Off");
m.setSatellite(true);
}
}
}
}

SetSatelliteをして航空写真にしようとすると

実行して、ボタンからSetSatelliteに処理が入ると


"Sorry!
The application ~ has stopped unexpectedly.
Please try again."


みたいな画面が出てそこでアプリ終了


Logcatでわかるはずもなく


最終的にはMapViewをActivity内で配置せず、

main.xmlで配置したらうまくいきました


いろんなページにあると思うけどこんなん感じでmain.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android "
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<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="<※ここはGoogleMap APIKeyだよ※>"
/>

</LinearLayout>


<※ここはGoogleMap APIKeyだよ※>

のとこは以前紹介したGoogleMap APIKeyで取得したやつさ


この先はめんどくさいからほかのページを見てくれ

http://android.siprop.org/index.php?%CA%D9%B6%AF%B2%F1%2FGoogleMap


MapActivityを継承して

クラスの中に

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

を書いて

setContentViewでmain.xmlを表示させれば地図はでるようだー





結局原因不明だが いずれわかるだろw


どういてじゃ! どういてできんのじゃ!





MapViewやっとこさ動きました



いろいろあったので、今思いつく範囲で問題と対応を箇条書きしてみよう


★com.google.android.maps.MapActivityをimportできんがぜよ!

 ⇒たぶん、プロジェクト作る際にGoogleAPIを指定して解決できた

  同様にcom.google.android.maps.MapViewもimportできるようになった


★com.google.android.maps ライブラリーを宣言するき!

 ⇒これははじめにやるのか

  AndroidManifest.xmlに

  <uses-library android:name="com.google.android.maps" />

  applicationタグに追記します


  インターネットも使うのでパーミッションの設定も忘れないように

  <uses-permission android:name="android.permission.INTERNET" />


★MapView map = new MapView(this)で怒られるぜよ!

 ⇒自分が勉強中のページでは

  

  MapView map = new MapView(this);


  でことはすみそうだったが、それは昔の話みたいですね

  結局は


  MapView map = new MapView(this,"***********************");


  みたいにした

  "************"ってところはテキトーでいけた(?)

  実際はここにGoogleMapsAPIKEYってのを入れるみたいよ

  とり方は下をよく見てくれ

  http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FGoogleMap2

  

★どういてInstallation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY出てしまうがじゃ!

 ⇒苦戦したけど、エミュレータのターゲットをGoogleAPIにしたらできた


無題のAndroid入門中



未来の自分よ

これ見てわかるかな~・・・





いろんなクラスを勉強中です


新しい勉強するクラスと、今までのクラスを分けときたいですよね(自分は分けたい)


そんなんで勉強してるクラスごとにActivityを作って、

Manifestファイルで表示するActivityを選択するようにしましょう



あーー、Mapviewクラスの勉強してーなーってときは


まず
無題のAndroid入門中
パッケージを右クリックして、新規→クラスを選択



次に設定画面、基本名前だけね

ほかよくしらんし

無題のAndroid入門中


クラスができました

そこにこまごまと実装したら

次はManifestファイルを修正


この追加したActivityを表示させるようにします


AndroidManifest.XMLを表示させます


もとがこれ↓

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="
http://schemas.android.com/apk/res/android "
package="mudai.co.jp"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".WebView_Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>


これに今回追加したActivityの定義と、

表示させたいんです宣言を追記する


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="
http://schemas.android.com/apk/res/android "
package="mudai.co.jp"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".WebView_Activity"
android:label="@string/app_name">
</activity>
<activity android:name=".MapView_Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>


赤いとこを追加しましたよー

んで

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

ってのが「こいつを表示はじめに表示させたいんです」って言っているところです

WebView\_Activityの宣言部からなくなってるでしょ?



これで実行すれば追加したActivityが表示されるはず


AlertDailogを表示させるときに


AlertDialog.show(this, "Title", title, "ok", false); 

見たいな感じで書くってあったけど


実際はshowってメソッドがポップアップしない


無題のブログ
こんな感じ



ネットで調べたら仕様が変わったみたいね

参照していたドキュメントが古かったみたい


こんな感じにしました

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


ad.setTitle("hogehoge");
ad.setMessage("ちゃんと表示できました");
ad.show();



よーーし、できた

ok

無題のブログ


無題のブログ
先日やっとこemulatorからWebViewクラスでインターネットが見れるようにけど、

今度はどこかのサイトに飛んだら表示していたボタンが消えた


ボタン隠しにあってネットをさまよったら答えがありました。

ネットの世界は広いですね


どうやら別にブラウザが立ち上がってたみたいです


詳しくはhttp://www.atmarkit.co.jp/fjava/rensai4/android09/android09_2.html



自分の場合だとこんな感じだ


webview = new WebView(this);
webview.setWebViewClient(new WebViewClient());
webview.loadUrl("http://www.google.co.jp/ ");


赤いところを追記でうまくいきました


これで新しくブラウザが立ち上がらず

ボタンもずっとそばにいます



無題のブログ
ズーーームイン!!

よかったー

なかなかかわいいな Android

あるAndroidの入門サイトを見てWebViewを試してみたら

「Web page not available」と表示されてしまって失敗


なんかemulator実行時の引数にproxyの設定をつければいい

みたいなのがあったけど、それでも無理で


結局パーミッションの設定ができていなかったようです

このリンク を見てください


<uses-permission
android:name="android.permission.INTERNET" />

って分を追加リンク先のように追記しないといけいないようです

http://android.siprop.org/index.php?%CA%D9%B6%AF%B2%F1%2FGoogleMap

よかったーできて