SurfaceViewのsurfaceCreated()が呼ばれるタイミング
ライフサイクルとかそこら辺とのかねあいの話ではないです。
結論
XMLで下の2つの状態でsetContentViewした時、
1つ目の場合だとsetContentViewのタイミングでsurfaceCreated()が呼ばれる。
2つ目の場合だとsetVisibility(View.VISIBLE)したタイミングでsurfaceCreated()が呼ばれる。
android:visibility="visible"
android:visibility="invisible"
AndroidのOSバージョンを表す定数たち
OSのバージョンごとに処理を分けたい時とかに使える。
3 = Build.VERSION_CODES.CUPCAKE
4 = Build.VERSION_CODES.DONUT
5 = Build.VERSION_CODES.ECLAIR
6 = Build.VERSION_CODES.ECLAIR_0_1
7 = Build.VERSION_CODES.ECLAIR_MR1
8 = Build.VERSION_CODES.FROYO
9 = Build.VERSION_CODES.GINGERBREAD
10 = Build.VERSION_CODES.GINGERBREAD_MR1
11 = Build.VERSION_CODES.HONEYCOMB
12 = Build.VERSION_CODES.HONEYCOMB_MR1
13 = Build.VERSION_CODES.HONEYCOMB_MR2
14 = Build.VERSION_CODES.ICE_CREAM_SANDWICH
15 = Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1
16 = Build.VERSION_CODES.JELLY_BEAN
17 = Build.VERSION_CODES.JELLY_BEAN_MR1
18 = Build.VERSION_CODES.JELLY_BEAN_MR2
19 = Build.VERSION_CODES.KITKAT
参考
http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
Androidでカスタムdialog
背景画像がデフォのアイコン画像なのでださいけども。
こんなかんじのが最終的にできます。
MainActivity
public class MainActivity extends Activity implements View.OnClickListener { private Context context; private Button button; private Dialog dialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; button = (Button) findViewById(R.id.button); button.setOnClickListener(this); } @Override protected void onDestroy() { if (dialog != null) { dialog.dismiss(); button.setEnabled(true); } super.onDestroy(); } @Override public void onClick(View v) { v.setEnabled(false); AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { @Override protected void onPreExecute() { dialog = new Dialog(context, R.style.AppBaseTheme_CustomDialog); dialog.setContentView(R.layout.custom_dialog); dialog.setCancelable(false); dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher)); dialog.getWindow().getAttributes().width = ViewGroup.LayoutParams.FILL_PARENT; dialog.getWindow().getAttributes().height = ViewGroup.LayoutParams.FILL_PARENT; dialog.show(); } @Override protected Void doInBackground(Void... arg0) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { if (dialog != null) { dialog.dismiss(); button.setEnabled(true); } } }; task.execute((Void[]) null); }
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="show dialog" /> </LinearLayout>
theme_custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppBaseTheme.CustomDialog" parent="android:Theme.DeviceDefault.Dialog"> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> </style> </resources>
custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ProgressBar android:layout_centerInParent="true" android:layout_height="wrap_content" android:layout_width="wrap_content" /> </RelativeLayout>
引数にActivityを渡す方法
MainActivityという名前のActivityクラスを渡す場合。
まずはNG
AsyncHttpRequest asyncHttpRequest = new AsyncHttpRequest(this);
こっちが正解
AsyncHttpRequest asyncHttpRequest = new AsyncHttpRequest(MainActivity.this);
EclipseでAndroidプロジェクトのbinとgenをSVN管理対象からはずす方法
AndroidプロジェクトをSVNでバージョン管理し始めた頃は何がなんだかよく分からないけど、
プロジェクトごと全部コミットしていました。
なんかファイルを少なくコミットして動かなくなったら嫌だなぁという思いからです。
新卒で開発に携わるようになって、バージョン管理なんて初めて触ったし。。。
しかししばらくして慣れてくるとgenは自動生成だからバージョン管理しなくても良いこと、
binはコンパイルして勝手にできること、.classpathと.projectも勝手に作られることなどがわかりました。
だから余計なファイルはバージョン管理から外したいけど、その方法がわからなかったので備忘録!
詳細はこちら
http://rtaki.blogspot.jp/2010/11/subclipse-bin.html
(´・ω・`)
native driverを使ってみるまでにしたこと
基本的にはgooglecodeの手順を参照しながら。
https://code.google.com/p/nativedriver/wiki/GettingStartedAndroid
1.プロジェクトをcheckout
まずはプロジェクトをチェックアウト。
svn checkout https://nativedriver.googlecode.com/svn/trunk nativedriver --username {hogehoge@gmail.com}
するとなにやらエラーが表示された。
Error validating server certificate for
本当は4行ぐらいずらっと出てきたけど、ここまでをググると理由はすぐに分かった。
どうやら証明書が正しいか?と聞いているらしい。
正しいので、accseptを表す「p」を打ち込んでエンター!!
無事チェックアウト完了。
2プロジェクトをビルドする
デフォルトだと、プロジェクトは下記にチェックアウトされる模様。
/Users/futabooo/nativedriver
ライブラリーのビルドを行う。
/Users/futabooo% cd nativedriver/android /Users/futabooo/nativedriver/android% ant
ビルド成功。
compile: BUILD SUCCESSFUL Total time: 41 seconds
エクリプスのプロジェクトが下記のパスにできてました。
/Users/futabooo/nativedriver/android/sample-aut/simplelayouts
3プロジェクトのインポート
さっきできたsimplelayoutのプロジェクトをEclipseにインポート。
このプロジェクトは被テストプロジェクト。
もうひとつテストプロジェクトをインポート
パスはこちら
/Users/futabooo/nativedriver/android/test
※プロジェクトをインポートしたあとはBuildPassで必要な物にチェックを入れておく必要がありました。
4実機へインストールする
simplelayoutをインストール後起動するとこんな感じ。
5テストの実行
サンプルはmanifestとか特に弄る必要がないようなので、そのままコマンドプロンプトでコマンドを実行する。
adb shell am instrument com.google.android.testing.nativedriver.simplelayouts/com.google.android.testing.nativedriver.server.ServerInstrumentation
これはNativeDriverクライアントがノーマルなTCP通信を通じて端末にアクセスできるようにするため。
だそうです。参考URL
adb forward tcp:54129 tcp:54129
ここまできたらEclipseにインポートしたtestのプロジェクトを実行。
その際JUnitTestを選択。
Eclipse JUnit Launcherを選択して実行。
テストが始まる!\(^o^)/
以上
GalaxyS2のUSBドライバー
http://www.samsung.com/jp/support/model/SGH-N033LKNDCM-downloads
Androidの開発で使うだけだからKiesなんて入れたくない!
って思って探した。
見つけるのに30分もかかった。
最初はUSのサポートページからやろうとしたけどモデル番号が日本のには書いてなかった\(^o^)/