<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4185057719286842197</id><updated>2012-02-17T03:11:01.026+09:00</updated><category term='PHP'/><category term='MySQL'/><category term='.NET(Mobile)'/><category term='育児'/><category term='雑記'/><category term='GrapeCityTool'/><category term='SQLite'/><category term='正規表現'/><category term='Java'/><category term='Android'/><category term='Blogger'/><category term='.NET(Webサービス)'/><category term='Oracle'/><category term='.NET'/><category term='ASP.NET'/><title type='text'>yan note</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default?start-index=101&amp;max-results=100'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>329</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-152791336824950143</id><published>2011-08-29T12:51:00.000+09:00</published><updated>2011-08-29T12:51:22.270+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　起動する画面が最大化される</title><content type='html'>久しぶりの投稿です。（1年ぶりだ・・・）&lt;br /&gt;&lt;br /&gt;.NetでSetUpファイルを作成しインストールすると、&lt;br /&gt;起動する画面が最大化される場合がありました。&lt;br /&gt;調査したところ、SetUpプロジェクトのファイルシステムで、プライマリ出力のショートカットを作成しており&lt;br /&gt;ショートカットのShowCmdプロパティが「vsdscMaximized」に設定されているためでした。&lt;br /&gt;&lt;br /&gt;ShowCmdプロパティ…ショートカットで呼び出されるアプリケーションの初期ウィンドウの状態を設定します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-152791336824950143?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/152791336824950143/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=152791336824950143&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/152791336824950143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/152791336824950143'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2011/08/net.html' title='.NET　起動する画面が最大化される'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-1582361929228121629</id><published>2010-11-25T10:45:00.001+09:00</published><updated>2010-11-25T10:52:20.652+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Spinner（スピナー）を使用する その５（SimpleCursorAdapter）</title><content type='html'>今回はSimpleCursorAdapterを使用してみました。&lt;br /&gt;SimpleCursorAdapterはxmlファイルで定義された複数のビューに対して、CursorオブジェクトのColumnをマッピングする簡単なアダプターです。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TO2_TaW0lWI/AAAAAAAABac/MaKhGdLp4xY/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TO2_TaW0lWI/AAAAAAAABac/MaKhGdLp4xY/s320/2.JPG" width="217" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1,データベースにデータを作成します。&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlite.html"&gt;Android SQLiteデータベースを作成する&lt;/a&gt;で作成したDatabaseHelper.javaを使用し、以下のようなテーブルを作成しました。&lt;br /&gt;&lt;br /&gt;CREATE TABLE Categories &lt;br /&gt;( &lt;br /&gt;CategoryID integer NOT NULL,&lt;br /&gt;CategoryName text NOT NULL,&lt;br /&gt;Description text,&lt;br /&gt;primary key(CategoryID)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;あとはInsert文で適当にデータを追加します。&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-insertupdatedelete.html"&gt;Android データベースにデータを書き込む（Insert、Update、Delete）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TO2_fA7oxYI/AAAAAAAABag/TLmHPKdzg08/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="145" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TO2_fA7oxYI/AAAAAAAABag/TLmHPKdzg08/s320/1.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;2,アクティビティのレイアウトにスピナーを追加します。&lt;br /&gt;res/layout/main.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:orientation="vertical"&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;Spinner &lt;br /&gt; android:id="@+id/Spinner01" &lt;br /&gt; android:layout_width="wrap_content" &lt;br /&gt; android:layout_height="wrap_content"&amp;gt; &lt;br /&gt;&amp;lt;/Spinner&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3,スピナーのレイアウトファイルを作成します。&lt;br /&gt;res/layout/spinner.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; android:orientation="vertical"&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;TextView &lt;br /&gt; android:id="@+id/text" &lt;br /&gt; style="?android:attr/spinnerItemStyle"&lt;br /&gt; android:singleLine="true"    &lt;br /&gt;    android:layout_width="fill_parent"    &lt;br /&gt;    android:layout_height="wrap_content"    &lt;br /&gt;    android:textSize="14sp"  &lt;br /&gt;    android:ellipsize="marquee" &amp;gt; &lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;注意点は&lt;br /&gt;・android:idは3で作成するレイアウトのidと同じにすること。&lt;br /&gt;・規定のスタイルを使用する場合は style="?android:attr/spinnerItemStyle"とすること。&lt;br /&gt;&lt;br /&gt;4,スピナーのドロップダウンリストのレイアウトファイルを作成します。&lt;br /&gt;res/layout/spinner_dropdown.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout&lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; android:orientation="vertical"&amp;gt; &lt;br /&gt;&lt;br /&gt; &amp;lt;TextView &lt;br /&gt;  android:id="@+id/text" &lt;br /&gt;  style="?android:attr/spinnerDropDownItemStyle"&lt;br /&gt;  android:layout_width="wrap_content" &lt;br /&gt;  android:layout_height="25sp"&lt;br /&gt;  android:textSize="14sp"&amp;gt;   &lt;br /&gt; &amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;TextView &lt;br /&gt;  android:id="@+id/description" &lt;br /&gt;  style="?android:attr/spinnerDropDownItemStyle"&lt;br /&gt;  android:layout_width="wrap_content" &lt;br /&gt;  android:layout_height="20sp"&lt;br /&gt;  android:textSize="10sp"&amp;gt;&lt;br /&gt; &amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;注意点は&lt;br /&gt;・android:idは2で作成するレイアウトのidと同じにすること。&lt;br /&gt;・規定のスタイルを使用する場合はstyle="?android:attr/spinnerDropDownItemStyle"とすること。&lt;br /&gt;&lt;br /&gt;5,アクティビティクラス&lt;br /&gt;SimpleCursorAdapterクラスを使用してスピナーの設定を行います。&lt;br /&gt;&lt;br /&gt;SimpleCursorAdapterクラスのコンストラクタ&lt;br /&gt;&lt;pre class="java" name="code"&gt;SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) &lt;br /&gt;&lt;/pre&gt;第1引数contextにはContextオブジェクトを指定します。&lt;br /&gt;&lt;br /&gt;第2引数layoutはスピナーに使用するレイアウトファイルのIDを指定します。&lt;br /&gt;今回は3で作成したレイアウトファイルを指定します。&lt;br /&gt;&lt;br /&gt;第3引数cにはドロップダウンリストに表示するアイテムを指定します。&lt;br /&gt;ドロップダウンリストに表示するアイテムは、データベースから取得したデータのCursorオブジェクトです。&lt;br /&gt;&lt;span style="color: red;"&gt;Cursorオブジェクトに「_id」フィールドが含まれていないとエラーになります。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;第4引数fromは第3引数で指定したCursorオブジェクトから、表示したいカラム名をString配列で指定します。&lt;br /&gt;&lt;br /&gt;第5引数toは第4引数fromで指定したカラムの値をを表示するレイアウトファイル内のViewのIdをint配列で指定します。&lt;br /&gt;&lt;br /&gt;またSimpleCursorAdapter#setDropDownViewResource()メソッドでドロップダウンリスト部分に使用するレイアウトファイルのIDを指定します。&lt;br /&gt;既定のレイアウトを使用する場合は、アンドロイドで定義されているandroid.R.layout.simple_spinner_dropdown_itemを指定します。&lt;br /&gt;今回は4で作成したレイアウトファイルを指定します。&lt;br /&gt;&lt;br /&gt;あとは作成したAdapterオブジェクトを、Spinner#.setAdapter()メソッドでスピナーに設定します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;データベースのデータを取得するには&lt;a href="http://www.blogger.com/"&gt;Android データベースのデータを読み込む（Select)&lt;/a&gt;を参考にしてください。&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;またSimpleCursorAdapterのコンストラクタ引数に指定するCursorオブジェクトには「_id」フィールドが含まれていないとエラーになります。データベースのテーブルに「_id」フィールドを用意するか、SELECT文で「_id」フィールドを追加してください。&lt;/span&gt;&lt;br /&gt;今回はSELECT文で「_id」フィールドを追加しました。&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.database.Cursor;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.AdapterView;&lt;br /&gt;import android.widget.SimpleCursorAdapter;&lt;br /&gt;import android.widget.Spinner;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;import android.widget.AdapterView.OnItemSelectedListener;&lt;br /&gt;&lt;br /&gt;public class MainActivty extends Activity {&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        &lt;br /&gt;        //データベースよりデータを取得します&lt;br /&gt;        DatabaseHelper dbHelper = new DatabaseHelper(this);      &lt;br /&gt;        SQLiteDatabase db = dbHelper.getReadableDatabase();  &lt;br /&gt;        String sql = "SELECT '0' AS _id, CategoryID, CategoryName, Description " +&lt;br /&gt;                     "FROM Categories";&lt;br /&gt;        Cursor cursor = db.rawQuery(sql,null);&lt;br /&gt;        //Adapterを作成します。&lt;br /&gt;        String[] from = {"CategoryName","Description"};&lt;br /&gt;        int[] to = {R.id.text,R.id.description};&lt;br /&gt;        SimpleCursorAdapter adapter = &lt;br /&gt;            new SimpleCursorAdapter(this,R.layout.spinner,cursor,from,to);&lt;br /&gt;        //ドロップダウンリストのレイアウトを設定します。   &lt;br /&gt;        adapter.setDropDownViewResource(R.layout.spinner_dropdown);   &lt;br /&gt;        //スピナーにadapterを設定します。   &lt;br /&gt;        Spinner spinner  = (Spinner)this.findViewById(R.id.Spinner01);   &lt;br /&gt;        spinner.setAdapter(adapter);&lt;br /&gt;        //スピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録します   &lt;br /&gt;        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {&lt;br /&gt;            public void onItemSelected(AdapterView parent, View view, int position, long id) {&lt;br /&gt;                Spinner spinner = (Spinner) parent;   &lt;br /&gt;                Cursor cursor = (Cursor)spinner.getSelectedItem();&lt;br /&gt;                int categoryId = cursor.getInt(cursor.getColumnIndex("CategoryID"));&lt;br /&gt;                Toast.makeText(MainActivty.this,&lt;br /&gt;                    Integer.valueOf(categoryId).toString(),&lt;br /&gt;                    Toast.LENGTH_LONG).show(); &lt;br /&gt;            }&lt;br /&gt;            public void onNothingSelected(AdapterView parent) {    &lt;br /&gt;            }   &lt;br /&gt;        });   &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;上記の方法で表示したスピナーのドロップダウンリストには、選択しているアイテムをチェック状態で表示するラジオボタンが表示されません。これは4で作成したドロップダウンリストのレイアウトファイルの最上位オブジェクトであるLinearLayoutがCheckableインターフェースを実装していないためだそうです。&lt;br /&gt;ドロップダウンリストにラジオボタンを表示するには前回の記事&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simpleadapter.html"&gt;Android Spinner（スピナー）を使用する その４（SimpleAdapter)&lt;/a&gt;を参考にしてください。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner.html"&gt;Android Spinner（スピナー）を使用する その１ &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner_16.html"&gt;Android Spinner（スピナー）を使用する その２（ArrayAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-3ui.html"&gt;Android Spinner（スピナー）を使用する その3（UIカスタマイズ) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simpleadapter.html"&gt;Android Spinner（スピナー）を使用する その4（SimpleAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simplecursoradapter.html"&gt;Android Spinner（スピナー）を使用する その５（SimpleCursorAdapter）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-1582361929228121629?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/1582361929228121629/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=1582361929228121629&amp;isPopup=true' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1582361929228121629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1582361929228121629'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/11/android-spinner-simplecursoradapter.html' title='Android Spinner（スピナー）を使用する その５（SimpleCursorAdapter）'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TO2_TaW0lWI/AAAAAAAABac/MaKhGdLp4xY/s72-c/2.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-2667590931587382653</id><published>2010-11-19T16:32:00.003+09:00</published><updated>2010-11-25T10:57:01.383+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Spinner（スピナー）を使用する その４（SimpleAdapter)</title><content type='html'>今回はSimpleAdapterを使用してみました。&lt;br /&gt;SimpleAdapterはxmlファイルで定義された複数のビューに対して、データをマッピングする簡単なアダプターです。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TOYmHde4YZI/AAAAAAAABaU/oW9bYWNpPwQ/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TOYmHde4YZI/AAAAAAAABaU/oW9bYWNpPwQ/s320/WS000000.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1,アクティビティのレイアウトにスピナーを追加します。&lt;br /&gt;res/layout/main.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:orientation="vertical"&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;Spinner &lt;br /&gt; android:id="@+id/Spinner01" &lt;br /&gt; android:layout_width="wrap_content" &lt;br /&gt; android:layout_height="wrap_content" &lt;br /&gt;&amp;lt;/Spinner&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2,スピナーのレイアウトファイルを作成します。&lt;br /&gt;res/layout/spinner.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; android:orientation="vertical"&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;TextView &lt;br /&gt; android:id="@+id/text" &lt;br /&gt; style="?android:attr/spinnerItemStyle"&lt;br /&gt; android:singleLine="true"    &lt;br /&gt;    android:layout_width="fill_parent"    &lt;br /&gt;    android:layout_height="wrap_content"    &lt;br /&gt;    android:textSize="14sp"  &lt;br /&gt;    android:ellipsize="marquee" &amp;gt; &lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;注意点は&lt;br /&gt;・android:idは3で作成するレイアウトのidと同じにすること。&lt;br /&gt;・規定のスタイルを使用する場合は style="?android:attr/spinnerItemStyle"とすること。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3,スピナーのドロップダウンリストのレイアウトファイルを作成します。&lt;br /&gt;res/layout/spinner_dropdown.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; android:orientation="vertical"&amp;gt; &lt;br /&gt;&amp;lt;TextView &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:id="@+id/text" &lt;br /&gt; style="?android:attr/spinnerDropDownItemStyle"&lt;br /&gt; android:singleLine="true" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:textSize="14sp"&lt;br /&gt; android:ellipsize="marquee" &lt;br /&gt;       android:layout_height="25sp"&amp;gt;&lt;br /&gt;&amp;lt;/TextView&amp;gt; &lt;br /&gt;&amp;lt;TextView &lt;br /&gt; android:id="@+id/description" &lt;br /&gt; style="?android:attr/spinnerDropDownItemStyle"&lt;br /&gt; android:singleLine="true" &lt;br /&gt; android:layout_width="fill_parent"&lt;br /&gt; android:layout_height="fill_parent"&lt;br /&gt; android:textSize="10sp"&lt;br /&gt; android:ellipsize="marquee"&amp;gt;&lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;注意点は&lt;br /&gt;・android:idは2で作成するレイアウトのidと同じにすること。&lt;br /&gt;・規定のスタイルを使用する場合はstyle="?android:attr/spinnerDropDownItemStyle"とすること。&lt;br /&gt;&lt;br /&gt;4,アクティビティクラス&lt;br /&gt;SimpleAdapterクラスを使用してスピナーの設定を行います。&lt;br /&gt;&lt;br /&gt;SimpleAdapterクラスのコンストラクタ&lt;br /&gt;&lt;pre class="java" name="code"&gt;SimpleAdapter(Context context, List&amp;lt;? extends Map&amp;lt;String, ?&amp;gt;&amp;gt; data, int resource, String[] from, int[] to) &lt;br /&gt;&lt;/pre&gt;第1引数contextにはContextオブジェクトを指定します。&lt;br /&gt;&lt;br /&gt;第2引数dataにはドロップダウンリストに表示するアイテムを指定します。&lt;br /&gt;ドロップダウンリストに表示するアイテムは、Mapインターフェースを格納したListインターフェースになっています。&lt;br /&gt;&lt;br /&gt;第3引数resourceはスピナーに使用するレイアウトファイルのIDを指定します。&lt;br /&gt;今回は2で作成したレイアウトファイルを指定します。&lt;br /&gt;&lt;br /&gt;第4引数fromは第2引数dataで指定したListの要素であるMapから、表示したい要素のキーをString配列で指定します。&lt;br /&gt;&lt;br /&gt;第5引数toは第4引数fromで指定したキーの値をを表示するレイアウトファイル内のViewのIdをint配列で指定します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;またSimpleAdapter#setDropDownViewResource()メソッドでドロップダウンリスト部分に使用するレイアウトファイルのIDを指定します。&lt;br /&gt;既定のレイアウトを使用する場合は、アンドロイドで定義されているandroid.R.layout.simple_spinner_dropdown_itemを指定します。&lt;br /&gt;今回は3で作成したレイアウトファイルを指定します。&lt;br /&gt;&lt;br /&gt;あとは作成したAdapterオブジェクトを、Spinner#.setAdapter()メソッドでスピナーに設定します。&lt;br /&gt;&lt;br /&gt;MainActivty.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android2;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.AdapterView;&lt;br /&gt;import android.widget.SimpleAdapter;&lt;br /&gt;import android.widget.Spinner;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;import android.widget.AdapterView.OnItemSelectedListener;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;  &lt;br /&gt;        //ドロップダウンデータの作成&lt;br /&gt;        ArrayList&amp;lt;HashMap&amp;lt;String, Object&amp;gt;&amp;gt; items = new ArrayList&amp;lt;HashMap&amp;lt;String, Object&amp;gt;&amp;gt;();&lt;br /&gt;        HashMap&amp;lt;String, Object&amp;gt; map = new HashMap&amp;lt;String, Object&amp;gt;();&lt;br /&gt;        //item1&lt;br /&gt;        map = new HashMap&amp;lt;String, Object&amp;gt;();&lt;br /&gt;        map.put("value",10);&lt;br /&gt;        map.put("text","item1");&lt;br /&gt;        map.put("description","description1");&lt;br /&gt;        items.add(map); &lt;br /&gt;        //item2&lt;br /&gt;        map = new HashMap&amp;lt;String, Object&amp;gt;();&lt;br /&gt;        map.put("value",20);&lt;br /&gt;        map.put("text","item2");&lt;br /&gt;        map.put("description","description2");&lt;br /&gt;        items.add(map);&lt;br /&gt;        //item3&lt;br /&gt;        map = new HashMap&amp;lt;String, Object&amp;gt;();&lt;br /&gt;        map.put("value",30);&lt;br /&gt;        map.put("text","item3");&lt;br /&gt;        map.put("description","description3");&lt;br /&gt;        items.add(map);&lt;br /&gt;  &lt;br /&gt;        //SimpleAdapterオブジェクトの作成&lt;br /&gt;        SimpleAdapter adapter = new SimpleAdapter(this,items,R.layout.spinner,&lt;br /&gt;                new String[]{"text","description"},&lt;br /&gt;                new int[]{R.id.text,R.id.description});&lt;br /&gt; &lt;br /&gt;        //ドロップダウンリストのレイアウトを設定します。&lt;br /&gt;        adapter.setDropDownViewResource(R.layout.spinner_dropdown);&lt;br /&gt;        //スピナーにadapterを設定します。&lt;br /&gt;        Spinner spinner  = (Spinner)this.findViewById(R.id.Spinner01);&lt;br /&gt;        spinner.setAdapter(adapter);&lt;br /&gt;        //スピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録します&lt;br /&gt;        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {&lt;br /&gt;            public void onItemSelected(AdapterView&amp;lt;?&amp;gt; parent, View arg1, int position, long id) {&lt;br /&gt;                Spinner spinner = (Spinner) parent;&lt;br /&gt;                HashMap&amp;lt;String, Object&amp;gt; item = (HashMap&amp;lt;String, Object&amp;gt;) spinner.getSelectedItem();  &lt;br /&gt;                Toast.makeText(MainActivity.this, item.get("value").toString(), Toast.LENGTH_LONG).show();&lt;br /&gt;            }&lt;br /&gt;            public void onNothingSelected(AdapterView&amp;lt;?&amp;gt; parent) {   &lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;ドロップダウンリストにラジオボタンを表示する&lt;/h1&gt;上記の方法で表示したスピナーのドロップダウンリストには、選択しているアイテムをチェック状態で表示するラジオボタンが表示されません。これは3で作成したドロップダウンリストのレイアウトファイルの最上位オブジェクトであるLinearLayoutがCheckableインターフェースを実装していないためだそうです。&lt;br /&gt;こちらで詳しく解説されています。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/tumo300-500/20100417/1271508768"&gt;だらだらとだらだら AndroidのAdapterViewで、カスタムビューを使っていてもCheckedTextViewなどのチェックをしたい(Spinnerのdropdown等)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;次はドロップダウンリストにラジオボタンを表示したいと思います。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TOYngPRlSPI/AAAAAAAABaY/DjW_xpaIyBk/s1600/WS000002.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TOYngPRlSPI/AAAAAAAABaY/DjW_xpaIyBk/s320/WS000002.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;1,まずはCheckableインターフェースを実装したLinearLayoutを作成します。&lt;br /&gt;src/my.study.android.widgets/CheckableLinearLayout.jar&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android.widgets;&lt;br /&gt;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.util.AttributeSet;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.Checkable;&lt;br /&gt;import android.widget.CheckedTextView;&lt;br /&gt;import android.widget.LinearLayout;&lt;br /&gt;&lt;br /&gt;public class CheckableLinearLayout extends LinearLayout implements Checkable {&lt;br /&gt; &lt;br /&gt;    private CheckedTextView mCheckbox;&lt;br /&gt; &lt;br /&gt;    public CheckableLinearLayout(Context context) {&lt;br /&gt;        super(context);&lt;br /&gt;    }&lt;br /&gt;    public CheckableLinearLayout(Context context, AttributeSet attrs) {        &lt;br /&gt;        super(context, attrs); &lt;br /&gt;    }&lt;br /&gt;    @Override    &lt;br /&gt;    protected void onFinishInflate() {&lt;br /&gt;        super.onFinishInflate();&lt;br /&gt;        // CheckedTextViewを探します。&lt;br /&gt;        int childCount = getChildCount();&lt;br /&gt;        for (int i = 0; i &amp;lt; childCount; ++i) {&lt;br /&gt;            View v = getChildAt(i);&lt;br /&gt;            if (v instanceof CheckedTextView) {&lt;br /&gt;                mCheckbox = (CheckedTextView)v;   &lt;br /&gt;            }  &lt;br /&gt;        }         &lt;br /&gt;    }&lt;br /&gt;    public boolean isChecked() {&lt;br /&gt;        return mCheckbox != null ? mCheckbox.isChecked() : false;   &lt;br /&gt;    }&lt;br /&gt;    public void setChecked(boolean checked) {&lt;br /&gt;        if (mCheckbox != null) {&lt;br /&gt;            mCheckbox.setChecked(checked);     &lt;br /&gt;        }      &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void toggle() {&lt;br /&gt;        if (mCheckbox != null) {&lt;br /&gt;            mCheckbox.toggle();     &lt;br /&gt;        }      &lt;br /&gt;    }   &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2,スピナーのドロップダウンリストのレイアウトファイルを作成します。&lt;br /&gt;res/layout/spinner_dropdown.xml &lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;my.study.android.widgets.CheckableLinearLayout &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; android:orientation="horizontal"&amp;gt; &lt;br /&gt; &lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; android:id="@+id/LinearLayout02" &lt;br /&gt; android:layout_height="wrap_content" &lt;br /&gt; android:orientation="vertical" &lt;br /&gt; android:layout_width="wrap_content"&lt;br /&gt; android:layout_weight="1"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;TextView &lt;br /&gt;  android:text="@+id/TextView02" &lt;br /&gt;  android:id="@+id/text" &lt;br /&gt;  style="?android:attr/spinnerDropDownItemStyle"&lt;br /&gt;  android:layout_width="wrap_content" &lt;br /&gt;  android:layout_height="25sp"&lt;br /&gt;  android:textSize="14sp"&amp;gt;   &lt;br /&gt; &amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;TextView &lt;br /&gt;  android:text="@+id/TextView01" &lt;br /&gt;  android:id="@+id/description" &lt;br /&gt;  style="?android:attr/spinnerDropDownItemStyle"&lt;br /&gt;  android:layout_width="wrap_content" &lt;br /&gt;  android:layout_height="20sp"&lt;br /&gt;  android:textSize="10sp"&amp;gt;&lt;br /&gt; &amp;lt;/TextView&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;CheckedTextView &lt;br /&gt; android:id="@+id/CheckedTextView01" &lt;br /&gt; style="?android:attr/spinnerDropDownItemStyle"&lt;br /&gt; android:layout_width="wrap_content" &lt;br /&gt; android:layout_height="wrap_content"&amp;gt;&lt;br /&gt;&amp;lt;/CheckedTextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/my.study.android.widgets.CheckableLinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MainActivity.java、Spinner.xmlの変更はありません。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner.html"&gt;Android Spinner（スピナー）を使用する その１ &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner_16.html"&gt;Android Spinner（スピナー）を使用する その２（ArrayAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-3ui.html"&gt;Android Spinner（スピナー）を使用する その3（UIカスタマイズ) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simpleadapter.html"&gt;Android Spinner（スピナー）を使用する その4（SimpleAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simplecursoradapter.html"&gt;Android Spinner（スピナー）を使用する その５（SimpleCursorAdapter）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-2667590931587382653?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/2667590931587382653/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=2667590931587382653&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2667590931587382653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2667590931587382653'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/11/android-spinner-simpleadapter.html' title='Android Spinner（スピナー）を使用する その４（SimpleAdapter)'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__ZiZX_sgyy4/TOYmHde4YZI/AAAAAAAABaU/oW9bYWNpPwQ/s72-c/WS000000.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-3682335940505080392</id><published>2010-11-17T13:28:00.003+09:00</published><updated>2010-11-25T10:58:09.433+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Spinner（スピナー）を使用する その３（UIカスタマイズ)</title><content type='html'>今回はスピナーのレイアウトを変更したいと思います。&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;複数行を表示できるようにする&lt;/h1&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TONXS-_iGCI/AAAAAAAABaE/1f6z-dQr2Ds/s1600/WS000001.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TONXS-_iGCI/AAAAAAAABaE/1f6z-dQr2Ds/s320/WS000001.JPG" width="214" /&gt;&lt;/a&gt;&lt;/div&gt;1,アクティビティのレイアウトにスピナーを追加します。&lt;br /&gt;res/layout/main.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:orientation="vertical"&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;Spinner &lt;br /&gt; android:id="@+id/Spinner01" &lt;br /&gt; android:layout_width="wrap_content" &lt;br /&gt; android:layout_height="wrap_content" &lt;br /&gt;&amp;lt;/Spinner&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2,スピナーのレイアウトファイルを作成します。&lt;br /&gt;res/layout/spinner.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;TextView  &lt;br /&gt;    xmlns:android="http://schemas.android.com/apk/res/android"  &lt;br /&gt;    android:id="@android:id/text2" &lt;br /&gt;    style="?android:attr/spinnerItemStyle" &lt;br /&gt;    android:singleLine="false" &lt;br /&gt;    android:layout_width="fill_parent" &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:textSize="12sp"&lt;br /&gt;    android:ellipsize="marquee" &amp;gt;&lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;/pre&gt;改行を表示できるようにするため「android:singleLine="false" 」を指定します。&lt;br /&gt;その他いくつか注意点があります。&lt;br /&gt;・android:idは3で作成するレイアウトのidと同じにすること。&lt;br /&gt;・android:idは"@android:id/text1"または"@android:id/text2"にすること。&lt;br /&gt;（android.R.idで定義されているのidがtext1またはtext2であるため）&lt;br /&gt;・規定のスタイルを使用する場合は style="?android:attr/spinnerItemStyle"とすること。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3,スピナーのドロップダウンリストのレイアウトファイルを作成します。&lt;br /&gt;res/layout/spinner_dropdown.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;CheckedTextView  &lt;br /&gt;    xmlns:android="http://schemas.android.com/apk/res/android"  &lt;br /&gt;    android:id="@android:id/text1" &lt;br /&gt;    style="?android:attr/spinnerDropDownItemStyle"&lt;br /&gt;    android:layout_height="?android:attr/listPreferredItemHeight" &lt;br /&gt;    android:singleLine="false" &lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt; android:textSize="13sp"&lt;br /&gt;    android:ellipsize="marquee" &amp;gt;&lt;br /&gt;&amp;lt;/CheckedTextView&amp;gt;&lt;br /&gt;&lt;/pre&gt;改行を表示できるようにするため「android:singleLine="false" 」を指定します。&lt;br /&gt;注意点は&lt;br /&gt;・android:idは2で作成するレイアウトのidと同じにすること。&lt;br /&gt;・android:idは"@android:id/text1"または"@android:id/text2"にすること。&lt;br /&gt;（android.R.idで定義されているのidがtext1またはtext2であるため）&lt;br /&gt;・規定のスタイルを使用する場合はstyle="?android:attr/spinnerDropDownItemStyle"とすること。&lt;br /&gt;&lt;br /&gt;4,アクティビティクラス&lt;br /&gt;ArrayAdapterクラスを使用してスピナーの設定を行います。&lt;br /&gt;&lt;br /&gt;ArrayAdapterクラスのコンストラクタは以下のようなものがあります。&lt;br /&gt;&lt;pre class="java" name="code"&gt;ArrayAdapter(Context context, int textViewResourceId) &lt;br /&gt;ArrayAdapter(Context context, int textViewResourceId, T[] objects) &lt;br /&gt;ArrayAdapter(Context context, int textViewResourceId, List&lt;t&gt; objects)&lt;br /&gt;&lt;/pre&gt;第1引数contextにはContextオブジェクトを指定します。&lt;br /&gt;&lt;br /&gt;第2引数textViewResourceIdにはスピナーに使用するレイアウトファイルのIDを指定します。&lt;br /&gt;既定のレイアウトを使用する場合は、アンドロイドで定義されているandroid.R.layout.simple_spinner_itemを指定します。&lt;br /&gt;今回は2で作成したレイアウトファイルを指定します。&lt;br /&gt;&lt;br /&gt;第3引数objectはドロップダウンリストに表示するアイテムを指定します。&lt;br /&gt;ドロップダウンリストに表示するアイテムはObject型の配列かList インターフェイス実装クラスになっています。&lt;br /&gt;それぞれの要素がCharSequence インターフェイスを実装したクラスである場合は、指定した値をそのまま表示しますが&lt;br /&gt;そうでなければ要素のtoString()の結果を出力します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;またArrayAdapter#setDropDownViewResource()メソッドでドロップダウンリスト部分に使用するレイアウトファイルのIDを指定します。&lt;br /&gt;既定のレイアウトを使用する場合は、アンドロイドで定義されているandroid.R.layout.simple_spinner_dropdown_itemを指定します。&lt;br /&gt;今回は3で作成したレイアウトファイルを指定します。&lt;br /&gt;&lt;br /&gt;あとは作成したAdapterオブジェクトを、Spinner#.setAdapter()メソッドでスピナーに設定します。&lt;br /&gt;&lt;br /&gt;MainActivty.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.ArrayAdapter;&lt;br /&gt;import android.widget.Spinner;&lt;br /&gt;&lt;br /&gt;public class MainActivty extends Activity {&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;   &lt;br /&gt;        //ArrayAdapterを作成&lt;br /&gt;        ArrayAdapter&lt;string&gt; adapter = &lt;br /&gt;    new ArrayAdapter&lt;string&gt;(this,R.layout.spinner);&lt;br /&gt;        //ドロップダウンリストのレイアウトを設定      &lt;br /&gt;        adapter.setDropDownViewResource(R.layout.spinner_dropdown);&lt;br /&gt;        //ドロップダウンアイテムの追加&lt;br /&gt;        adapter.add("item1\nDescription1");&lt;br /&gt;        adapter.add("item2\nDescription2");&lt;br /&gt;        adapter.add("item3\nDescription3");&lt;br /&gt;        //スピナーにadapterを設定&lt;br /&gt;        Spinner spinner = (Spinner)this.findViewById(R.id.Spinner01);&lt;br /&gt;        spinner.setAdapter(adapter);&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;ドロップダウンのアイコンを変更する&lt;/h1&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TONXekW5hxI/AAAAAAAABaI/4KSwuLYoP1g/s1600/WS000002.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TONXekW5hxI/AAAAAAAABaI/4KSwuLYoP1g/s320/WS000002.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;1,画像ファイルを配置します。&lt;br /&gt;解像度に合わせてres/drawable-hdpi, res/drawable-mdpi, res/drawable-ldpiに、選択している時の画像と選択していないときの画像を配置します。&lt;br /&gt;今回は選択された時の画像としてstar_big_on.png、選択していない時の画像としてstart_big_off.pngを追加しました。&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TONX1D8m6TI/AAAAAAAABaM/6XuqApMyLKM/s1600/star_big_on.png" imageanchor="1" style="clear: left; cssfloat: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" px="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TONX1D8m6TI/AAAAAAAABaM/6XuqApMyLKM/s1600/star_big_on.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;star_big_on.png&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TONX43SsFEI/AAAAAAAABaQ/QG_AAG1dAyg/s1600/star_big_off.png" imageanchor="1" style="clear: left; cssfloat: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" px="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TONX43SsFEI/AAAAAAAABaQ/QG_AAG1dAyg/s1600/star_big_off.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;star_big_off.png&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;2,画像のSelectorを作成します。&lt;br /&gt;res/drawable-hdpi, res/drawable-mdpi, res/drawable-ldpiのそれぞれに、状態に応じて画像を選択するselectorファイルを作成します。&lt;br /&gt;res/drawable-xdpi/spinner_selector.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;selector&lt;br /&gt;  xmlns:android="http://schemas.android.com/apk/res/android"&amp;gt;&lt;br /&gt; &amp;lt;item&lt;br /&gt;  android:state_checked="true"&lt;br /&gt;  android:drawable="@drawable/star_big_on" /&amp;gt;&lt;br /&gt; &amp;lt;item &lt;br /&gt;  android:state_checked="false"       &lt;br /&gt;  android:drawable="@drawable/star_big_off" /&amp;gt;&lt;br /&gt;&amp;lt;/selector&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3,スタイルファイルを作成します。&lt;br /&gt;先ほど作成したselectorファイルを指定するスタイルファイルを作成します。&lt;br /&gt;res/values/styles.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources &amp;gt;&lt;br /&gt;    &amp;lt;style name="SpinnerDropDownIcon" parent="android:Widget.DropDownItem.Spinner"&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:checkMark"&amp;gt;@drawable/spinner_selector&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4,スピナーのドロップダウンリストのレイアウトファイルを作成します。&lt;br /&gt;res/layout/spinner_dropdown.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;CheckedTextView  &lt;br /&gt;    xmlns:android="http://schemas.android.com/apk/res/android"  &lt;br /&gt;    android:id="@android:id/text1" &lt;br /&gt;    style="@style/SpinnerDropDownIcon"&lt;br /&gt;    android:layout_height="?android:attr/listPreferredItemHeight" &lt;br /&gt;    android:singleLine="false" &lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt; android:textSize="13sp"&lt;br /&gt;    android:ellipsize="marquee" &amp;gt;&lt;br /&gt;&amp;lt;/CheckedTextView&amp;gt;&lt;br /&gt;&lt;/pre&gt;styleには3で作成したスタイルファイルを指定します。&lt;br /&gt;&lt;br /&gt;5.スピナーのレイアウトファイルを作成します。&lt;br /&gt;res/layout/spinner.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;TextView  &lt;br /&gt;    xmlns:android="http://schemas.android.com/apk/res/android"  &lt;br /&gt;    android:id="@android:id/text2" &lt;br /&gt;    style="?android:attr/spinnerItemStyle" &lt;br /&gt;    android:singleLine="false" &lt;br /&gt;    android:layout_width="fill_parent" &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:textSize="12sp"&lt;br /&gt;    android:ellipsize="marquee" &amp;gt;&lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;6.アクティビティクラス&lt;br /&gt;MainActivty.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.ArrayAdapter;&lt;br /&gt;import android.widget.Spinner;&lt;br /&gt;&lt;br /&gt;public class MainActivty extends Activity {&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;   &lt;br /&gt;        //ArrayAdapterを作成&lt;br /&gt;        ArrayAdapter&lt;string&gt; adapter = &lt;br /&gt;    new ArrayAdapter&lt;string&gt;(this,R.layout.spinner);&lt;br /&gt;        //ドロップダウンリストのレイアウトを設定      &lt;br /&gt;        adapter.setDropDownViewResource(R.layout.spinner_dropdown);&lt;br /&gt;        //ドロップダウンアイテムの追加&lt;br /&gt;        adapter.add("item1\nDescription1");&lt;br /&gt;        adapter.add("item2\nDescription2");&lt;br /&gt;        adapter.add("item3\nDescription3");&lt;br /&gt;        //スピナーにadapterを設定&lt;br /&gt;        Spinner spinner = (Spinner)this.findViewById(R.id.Spinner01);&lt;br /&gt;        spinner.setAdapter(adapter);&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner.html"&gt;Android Spinner（スピナー）を使用する その１ &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner_16.html"&gt;Android Spinner（スピナー）を使用する その２（ArrayAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-3ui.html"&gt;Android Spinner（スピナー）を使用する その3（UIカスタマイズ) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simpleadapter.html"&gt;Android Spinner（スピナー）を使用する その4（SimpleAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simplecursoradapter.html"&gt;Android Spinner（スピナー）を使用する その５（SimpleCursorAdapter）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-3682335940505080392?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/3682335940505080392/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=3682335940505080392&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3682335940505080392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3682335940505080392'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/11/android-spinner-3ui.html' title='Android Spinner（スピナー）を使用する その３（UIカスタマイズ)'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TONXS-_iGCI/AAAAAAAABaE/1f6z-dQr2Ds/s72-c/WS000001.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4214509628840060323</id><published>2010-11-16T12:09:00.007+09:00</published><updated>2010-11-25T10:58:52.682+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Spinner（スピナー）を使用する その２（ArrayAdapter)</title><content type='html'>前回&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner.html"&gt;Android Spinner（スピナー）を使用する その１ &lt;/a&gt;&lt;br /&gt;はスピナーのドロップダウンリストに表示する各アイテムをリソースファイルで定義しましたが、今回はArrayAdapterクラスを利用してコードから指定したいと思います。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TOH1eYfJkEI/AAAAAAAABaA/-BXbtYVa_4M/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TOH1eYfJkEI/AAAAAAAABaA/-BXbtYVa_4M/s320/WS000000.JPG" width="216" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1,アクティビティのレイアウトにスピナーを追加します。&lt;br /&gt;res/layout/main.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:orientation="vertical"&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;Spinner &lt;br /&gt; android:id="@+id/Spinner01" &lt;br /&gt; android:layout_width="wrap_content" &lt;br /&gt; android:layout_height="wrap_content" &lt;br /&gt;&amp;lt;/Spinner&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2,スピナーのドロップダウンリストに表示するプロンプトを定義します。&lt;br /&gt;res/values/strings.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;    &amp;lt;string name="SpinnerPrompt"&amp;gt;選択してください。&amp;lt;/string&amp;gt;&lt;br /&gt;        :&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3,アクティビティクラス&lt;br /&gt;ArrayAdapterクラスを使用してスピナーの設定を行います。&lt;br /&gt;&lt;br /&gt;ArrayAdapterクラスのコンストラクタは以下のようなものがあります。&lt;br /&gt;&lt;pre class="java" name="code"&gt;ArrayAdapter(Context context, int textViewResourceId) &lt;br /&gt;ArrayAdapter(Context context, int textViewResourceId, T[] objects) &lt;br /&gt;ArrayAdapter(Context context, int textViewResourceId, List&lt;t&gt; objects)&lt;br /&gt;&lt;/pre&gt;第1引数contextにはContextオブジェクトを指定します。&lt;br /&gt;&lt;br /&gt;第2引数textViewResourceIdにはスピナーに使用するレイアウトファイルのIDを指定します。&lt;br /&gt;今回はtextViewResourceIdには、アンドロイドで定義されているandroid.R.layout.simple_spinner_itemを指定します。&lt;br /&gt;&lt;br /&gt;第3引数objectはドロップダウンリストに表示するアイテムを指定します。&lt;br /&gt;ドロップダウンリストに表示するアイテムはObject型の配列かList インターフェイス実装クラスになっています。&lt;br /&gt;それぞれの要素がCharSequence インターフェイスを実装したクラスである場合は、指定した値をそのまま表示しますが&lt;br /&gt;そうでなければ要素のtoString()の結果を出力します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;またArrayAdapter#setDropDownViewResource()メソッドでドロップダウンリスト部分に使用するレイアウトファイルのIDを指定します。&lt;br /&gt;今回は、アンドロイドで定義されているandroid.R.layout.simple_spinner_dropdown_itemを指定します。&lt;br /&gt;&lt;br /&gt;あとは作成したAdapterオブジェクトを、Spinner#.setAdapter()メソッドでスピナーに設定します。&lt;br /&gt;&lt;br /&gt;MainActivty.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.AdapterView;&lt;br /&gt;import android.widget.ArrayAdapter;&lt;br /&gt;import android.widget.Spinner;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;import android.widget.AdapterView.OnItemSelectedListener;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class MainActivty extends Activity {&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;  &lt;br /&gt;        // ArrayAdapter を作成  &lt;br /&gt;        String items[] = {"items1","items2","items3"};&lt;br /&gt;        ArrayAdapter&amp;lt;String&amp;gt; adapter&lt;br /&gt;                = new ArrayAdapter&amp;lt;String&amp;gt;(this, android.R.layout.simple_spinner_item, items);&lt;br /&gt;        //または&lt;br /&gt;        //ArrayAdapter&amp;lt;String&amp;gt; adapter&lt;br /&gt;        //        = new ArrayAdapter&amp;lt;string&amp;gt;(this, android.R.layout.simple_spinner_item）&lt;br /&gt;        //adapter.add("item1");&lt;br /&gt;        //adapter.add("item2");&lt;br /&gt;        //adapter.add("item3");&lt;br /&gt;        &lt;br /&gt;        // ドロップダウンリストのレイアウトを設定   &lt;br /&gt;        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  &lt;br /&gt;         &lt;br /&gt;        //spinnerにAdapterを設定&lt;br /&gt;        Spinner spinner  = (Spinner)this.findViewById(R.id.Spinner01);&lt;br /&gt;        spinner.setAdapter(adapter);&lt;br /&gt;        // Spinner に表示させるプロンプトを設定   &lt;br /&gt;        spinner.setPromptId(R.string.SpinnerPrompt );&lt;br /&gt;  &lt;br /&gt;        // スピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録します&lt;br /&gt;        spinner.setOnItemSelectedListener(new OnItemSelectedListener(){&lt;br /&gt;            //Spinnerのドロップダウンアイテムが選択された時&lt;br /&gt;            public void onItemSelected(AdapterView parent, View viw, int arg2, long arg3) {&lt;br /&gt;                Spinner spinner = (Spinner)parent;&lt;br /&gt;                String item = (String)spinner.getSelectedItem();&lt;br /&gt;                Toast.makeText(MainActivty.this, item, Toast.LENGTH_LONG).show();&lt;br /&gt;            }&lt;br /&gt;            //Spinnerのドロップダウンアイテムが選択されなかった時&lt;br /&gt;            public void onNothingSelected(AdapterView parent) {&lt;br /&gt;            }});&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner.html"&gt;Android Spinner（スピナー）を使用する その１ &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner_16.html"&gt;Android Spinner（スピナー）を使用する その２（ArrayAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-3ui.html"&gt;Android Spinner（スピナー）を使用する その3（UIカスタマイズ) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simpleadapter.html"&gt;Android Spinner（スピナー）を使用する その4（SimpleAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simplecursoradapter.html"&gt;Android Spinner（スピナー）を使用する その５（SimpleCursorAdapter）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4214509628840060323?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4214509628840060323/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4214509628840060323&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4214509628840060323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4214509628840060323'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/11/android-spinner_16.html' title='Android Spinner（スピナー）を使用する その２（ArrayAdapter)'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/TOH1eYfJkEI/AAAAAAAABaA/-BXbtYVa_4M/s72-c/WS000000.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-54311974513780484</id><published>2010-11-16T08:28:00.005+09:00</published><updated>2010-11-25T10:59:32.939+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Spinner（スピナー）を使用する その１</title><content type='html'>Spinnerはクリックするとリストが表示され、そこから項目を選択することができる、Windowsのコンボボックスのようなものです。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TOHB4JPhp8I/AAAAAAAABZ8/Cy_hp3e0Sik/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TOHB4JPhp8I/AAAAAAAABZ8/Cy_hp3e0Sik/s320/1.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;まずは基本的な使い方から。&lt;br /&gt;&lt;br /&gt;1,スピナーのドロップダウンアイテムに設定する文字列の配列を定義します。&lt;br /&gt;res/values/arrays.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;string-array name="SpinnerItems"&amp;gt;&lt;br /&gt; &amp;lt;item&amp;gt;Item1&amp;lt;/item&amp;gt;&lt;br /&gt; &amp;lt;item&amp;gt;Item2&amp;lt;/item&amp;gt;&lt;br /&gt; &amp;lt;item&amp;gt;Item3&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/string-array&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2,アクティビティのレイアウトにスピナーを追加します。&lt;br /&gt;res/layout/main.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt; android:orientation="vertical"&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;Spinner &lt;br /&gt; android:id="@+id/Spinner01" &lt;br /&gt; android:layout_width="wrap_content" &lt;br /&gt; android:layout_height="wrap_content" &lt;br /&gt; android:entries="@array/SpinnerItems" &lt;br /&gt; android:prompt="@string/SpinnerPrompt"&amp;gt;&lt;br /&gt;&amp;lt;/Spinner&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;entriesプロパティで1で作成した文字列配列を指定します。&lt;br /&gt;SpinnerPromptプロパティでドロップダウンに表示するプロンプトを指定します。&lt;br /&gt;ここではres/values/strings.xmlに指定した値を使用しています。&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;    &amp;lt;string name="SpinnerPrompt"&amp;gt;選択してください。&amp;lt;/string&amp;gt;&lt;br /&gt;        :&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3,アクティビティクラスでスピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.AdapterView;&lt;br /&gt;import android.widget.Spinner;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;import android.widget.AdapterView.OnItemSelectedListener;&lt;br /&gt;&lt;br /&gt;public class MainActivty extends Activity {&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        &lt;br /&gt;        // スピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録します        &lt;br /&gt;        Spinner spinner = (Spinner)this.findViewById(R.id.Spinner01);&lt;br /&gt;        spinner.setOnItemSelectedListener(new OnItemSelectedListener(){&lt;br /&gt;            //Spinnerのドロップダウンアイテムが選択された時&lt;br /&gt;            public void onItemSelected(AdapterView parent, View viw, int arg2, long arg3) {&lt;br /&gt;                Spinner spinner = (Spinner)parent;&lt;br /&gt;                String item = (String)spinner.getSelectedItem();&lt;br /&gt;                Toast.makeText(MainActivty.this, item, Toast.LENGTH_LONG).show();&lt;br /&gt;            }&lt;br /&gt;            //Spinnerのドロップダウンアイテムが選択されなかった時&lt;br /&gt;            public void onNothingSelected(AdapterView parent) {&lt;br /&gt;            }});&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner.html"&gt;Android Spinner（スピナー）を使用する その１ &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner_16.html"&gt;Android Spinner（スピナー）を使用する その２（ArrayAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-3ui.html"&gt;Android Spinner（スピナー）を使用する その3（UIカスタマイズ) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simpleadapter.html"&gt;Android Spinner（スピナー）を使用する その4（SimpleAdapter)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/11/android-spinner-simplecursoradapter.html"&gt;Android Spinner（スピナー）を使用する その５（SimpleCursorAdapter）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-54311974513780484?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/54311974513780484/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=54311974513780484&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/54311974513780484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/54311974513780484'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/11/android-spinner.html' title='Android Spinner（スピナー）を使用する その１'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/TOHB4JPhp8I/AAAAAAAABZ8/Cy_hp3e0Sik/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-656140313046920413</id><published>2010-10-22T18:35:00.001+09:00</published><updated>2010-10-22T18:37:01.261+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQLite'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android SQLite いろいろメモ</title><content type='html'>&lt;h1 class="category"&gt;SQLiteのデータ型&lt;/h1&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;INTEGER&lt;/td&gt;&lt;td&gt;符号付整数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REAL&lt;/td&gt;&lt;td&gt;浮動小数点&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TEXT&lt;/td&gt;&lt;td&gt;テキスト&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BLOB&lt;/td&gt;&lt;td&gt;バイナリデータ&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h1 class="category"&gt;システム日付を取得する&lt;/h1&gt;CURRENT_TIMESTAMP、CURRENT_DATE、CURRENT_TIMEはUTC（協定世界時）になる。&lt;br /&gt;ローカルタイムゾーンの現在時刻はdatetime('now', 'localtime')で取得する。&lt;br /&gt;&lt;pre name="code" class="sql"&gt;insert into PFNAVIKNR (&lt;br /&gt;    Cd,&lt;br /&gt;    Name,&lt;br /&gt;    Age,&lt;br /&gt;    UpdDate&lt;br /&gt;    ) values (1, 'yan', 24, datetime('now', 'localtime'))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;テーブルを作成する&lt;/h1&gt;&lt;pre name="code" class="sql"&gt;CREATE TABLE MyTable&lt;br /&gt;(&lt;br /&gt;    Cd          integer   NOT NULL,&lt;br /&gt;    SeqNo       integer   NOT NULL,&lt;br /&gt;    UpdDate     text,&lt;br /&gt;    primary key(Cd,SeqNo)&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;テーブルを削除する&lt;/h1&gt;&lt;pre name="code" class="sql"&gt;DROP TABLE MyTable&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-656140313046920413?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/656140313046920413/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=656140313046920413&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/656140313046920413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/656140313046920413'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/android-sqlite.html' title='Android SQLite いろいろメモ'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-1195017291137071312</id><published>2010-10-19T16:28:00.001+09:00</published><updated>2010-10-22T09:44:46.342+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET ファイル読み込み時の注意点</title><content type='html'>以下のコードは&lt;br /&gt;ファイルの存在チェックを行い、&lt;br /&gt;ファイルが存在する場合はファイルの内容を読み込みます。&lt;br /&gt;&lt;pre name="code" class="vb"&gt;Dim path As String = "D:\test.csv"  '※D:\test.csvは存在するものとします。&lt;br /&gt;'ファイルが存在するかどうか&lt;br /&gt;Dim isExists As Boolean = System.IO.File.Exists(path)&lt;br /&gt;Console.WriteLine("isExists:" &amp; isExists)&lt;br /&gt;'ファイル読み込み&lt;br /&gt;If isExists = True Then&lt;br /&gt;    Dim line() As String = System.IO.File.ReadAllLines(path)&lt;br /&gt;End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ファイルパスの「途中」に改行コードを追加すると、System.IO.File.Exists()メソッドはfalseを返します。&lt;br /&gt;なので、ファイル読み込みは行われません。&lt;br /&gt;&lt;pre name="code" class="vb"&gt;Dim path As String = "D:\" &amp; Environment.NewLine &amp; "test.csv"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ファイルパスの「末尾」に改行コードを追加すると System.IO.File.Exists()メソッドはtrueを返します。&lt;br /&gt;なので、ファイル読み込みが行われるのですが、System.IO.File.ReadAllLines()メソッドは例外「ArgumentExceptionp：パスに無効な文字が含まれます。」をスローします。&lt;br /&gt;&lt;pre name="code" class="vb"&gt;Dim path As String = "D:\test.csv" &amp; Environment.NewLine&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;結論&lt;br /&gt;ファイル存在チェックとは別にファイルに不正な文字が含まれているかチェックする必要がある。&lt;br /&gt;&lt;pre name="code" class="vb"&gt;Dim path As String = "D:\test.csv" &amp; Environment.NewLine&lt;br /&gt;'パスに無効な文字が含まれていないか&lt;br /&gt;Dim isInvalidChars As Boolean = (path.IndexOfAny(System.IO.Path.GetInvalidPathChars) &lt;&gt; -1)&lt;br /&gt;Console.WriteLine("isInvalidChars:" &amp; isInvalidChars)&lt;br /&gt;'ファイルが存在するかどうか&lt;br /&gt;Dim isExists As Boolean = System.IO.File.Exists(path)&lt;br /&gt;Console.WriteLine("isExists:" &amp; isExists)&lt;br /&gt;'ファイル読み込み&lt;br /&gt;If isExists = True AndAlso isInvalidChars = True Then&lt;br /&gt;    Dim line() As String = System.IO.File.ReadAllLines(path)&lt;br /&gt;End If&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-1195017291137071312?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/1195017291137071312/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=1195017291137071312&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1195017291137071312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1195017291137071312'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/net.html' title='.NET ファイル読み込み時の注意点'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8579308112785275178</id><published>2010-10-19T14:54:00.000+09:00</published><updated>2010-10-19T14:54:33.455+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='育児'/><title type='text'>子供の英語2</title><content type='html'>子供が英語教室から帰ってきた。&lt;br /&gt;今日もたくさんの単語を覚えてきたようだ。&lt;br /&gt;どんな単語か見せてもらった。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Astronaut&lt;/b&gt;&lt;br /&gt;宇宙飛行士。&lt;br /&gt;…読めない…orz&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Orangutan&lt;/b&gt;&lt;br /&gt;これは読めた。&lt;br /&gt;私「オラウータン(ﾟ∀ﾟ)/」&lt;br /&gt;子「オラングタン(　´,_ゝ｀)」&lt;br /&gt;私「…(´Д⊂ヽ」&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;子供と一緒に英単語CDを聞きながら発音するんだけど、聞き取れない。&lt;br /&gt;聞き取れても知っている単語だと、記憶が邪魔して聞いた通りに発音できない。&lt;br /&gt;その点、子供は聞いた通りに発音するから結構いい感じに聞こえる。&lt;br /&gt;&lt;br /&gt;最近は子供より真剣に英語CD(小学生低学年用）を聞いているw&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8579308112785275178?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8579308112785275178/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8579308112785275178&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8579308112785275178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8579308112785275178'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/2.html' title='子供の英語2'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-5444635260398340432</id><published>2010-10-14T14:29:00.000+09:00</published><updated>2010-10-14T14:29:37.218+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Buttonの表示/非表示</title><content type='html'>Buttonの表示/非表示を設定するにはview#setVisibility(int visibility)メソッドを使用します。&lt;br /&gt;引数には可視状態を表す定数を指定します。&lt;br /&gt;view.VISIBLE・・・表示&lt;br /&gt;view.INVISIBLE・・・非表示（非表示にしたスペースは詰めない） &lt;br /&gt;view.GONE・・・非表示（非表示にしたスペースを詰める）&lt;br /&gt;&lt;br /&gt;下記の画像はButton01を INVISIBLEとGONEで非表示にしたものです。&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TLaUaVftMuI/AAAAAAAABZw/542QK3KTs9o/s1600/WS000002.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" ex="true" height="320" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TLaUaVftMuI/AAAAAAAABZw/542QK3KTs9o/s320/WS000002.JPG" width="215" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;View.INVISIBLE&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TLaUdJSgj6I/AAAAAAAABZ0/lGN1XeDlSXE/s1600/WS000001.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" ex="true" height="320" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TLaUdJSgj6I/AAAAAAAABZ0/lGN1XeDlSXE/s320/WS000001.JPG" width="216" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;View.GONE&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Button03をクリックするとButton01の可視状態を切り替えます。&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;&lt;br /&gt;public class MainActivty extends Activity {&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        &lt;br /&gt;        Button btn3 = (Button)this.findViewById(R.id.Button03);&lt;br /&gt;        btn3.setOnClickListener(new OnClickListener(){&lt;br /&gt;            public void onClick(View v) {&lt;br /&gt;                Button btn1 = (Button)MainActivty.this.findViewById(R.id.Button01);&lt;br /&gt;                if (btn1.getVisibility() != View.VISIBLE) {&lt;br /&gt;                    btn1.setVisibility(View.VISIBLE);&lt;br /&gt;                } else {&lt;br /&gt;                    btn1.setVisibility(View.INVISIBLE);&lt;br /&gt;                }    &lt;br /&gt;            }});&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;レイアウト.xmlで可視状態を設定する場合は「android:visibility」で指定します。&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;Button &lt;br /&gt; android:id="@+id/Button01" &lt;br /&gt; android:layout_width="wrap_content" &lt;br /&gt; android:layout_height="wrap_content" &lt;br /&gt; android:text="Button01"&lt;br /&gt; android:visibility="gone"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-5444635260398340432?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/5444635260398340432/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=5444635260398340432&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5444635260398340432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5444635260398340432'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/android-button.html' title='Android Buttonの表示/非表示'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TLaUaVftMuI/AAAAAAAABZw/542QK3KTs9o/s72-c/WS000002.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-1302919013588083448</id><published>2010-10-14T13:27:00.000+09:00</published><updated>2010-10-14T13:27:42.391+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='育児'/><title type='text'>子供が英語を習い始めた</title><content type='html'>ウチの娘が英語を習い始めた。&lt;br /&gt;動機は仲の良い友達がずっと英語を習っているからwww&lt;br /&gt;まッ動機はどうあれ、これでゆっくり仕事ができるし、子供が英語に興味を持てば一石二鳥♪ﾔｯﾎ-♪&lt;br /&gt;…と思ったけど、そんなに甘くはないのね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;宿題で覚える単語に「cow」と「bull」があった。&lt;br /&gt;私の頭の中では「牛=cow」しかなくて、そういや「bullも牛だなぁ」といきなり躓いた。&lt;br /&gt;違いはなんだろうと調べると&lt;br /&gt;cow = メス牛&lt;br /&gt;bull = オス牛&lt;br /&gt;一般的に牛はcowを使うらしい。&lt;br /&gt;&lt;br /&gt;他にも「hen」と「rooster」があった。henなんて聞いたこともないしw&lt;br /&gt;hen = メス鶏&lt;br /&gt;rooster = オス鶏&lt;br /&gt;一般的にはchickenを使うらしい。&lt;br /&gt;&lt;br /&gt;自分のVocabularyの無さに打ちのめされた・・・。&lt;br /&gt;そしてこれからも単語の意味を調べ続けるんだろうなぁ～&lt;br /&gt;&lt;br /&gt;ちなみに英語教室から帰ってきた娘に&lt;br /&gt;「英語教室どうだった？」と聞くと&lt;br /&gt;「楽しかったー！！」と元気に答えた。ｳﾝﾖｶｯﾀﾈ～&lt;br /&gt;「何習ったの？」と聞くと&lt;br /&gt;「・・・・・・」何も答えられなかったw&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-1302919013588083448?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/1302919013588083448/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=1302919013588083448&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1302919013588083448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1302919013588083448'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/blog-post.html' title='子供が英語を習い始めた'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4141345919648168257</id><published>2010-10-14T11:29:00.000+09:00</published><updated>2010-10-14T11:29:58.283+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET(Mobile)'/><title type='text'>OeacleLite GroupBy句とOrderBy句は一緒に使えない</title><content type='html'>OracleLite10gで、GroupBy句とOrderBy句を一緒に使用するとソートされません。&lt;br /&gt;&lt;br /&gt;以下のようなsqlはOrderBy句が無視されます。&lt;br /&gt;SELECT hoge1, hoge2, hoge3 &lt;br /&gt;FROM table&lt;br /&gt;GROUP BY hoge1, hoge2, hoge3&lt;br /&gt;ORDER BY hoge3&lt;br /&gt;&lt;br /&gt;この問題を回避するために、GroupBy句を副表にします。&lt;br /&gt;SELECT hoge1, hoge2, hoge3&lt;br /&gt;FROM (SELECT hoge1, hoge2, hoge3 FROM table GROUP BY hoge1, hoge2, hoge3)&lt;br /&gt;ORDER BY hoge3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4141345919648168257?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4141345919648168257/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4141345919648168257&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4141345919648168257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4141345919648168257'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/oeaclelite-groupbyorderby.html' title='OeacleLite GroupBy句とOrderBy句は一緒に使えない'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-9003647959247348287</id><published>2010-10-07T16:29:00.000+09:00</published><updated>2010-10-07T16:29:15.231+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android ボタンに画像とテキストを表示する</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TK12u6-WKTI/AAAAAAAABZc/cor2IGJqiTA/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ex="true" height="320" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TK12u6-WKTI/AAAAAAAABZc/cor2IGJqiTA/s320/WS000000.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;ImageButtonではなくButtonを使用します。&lt;br /&gt;&lt;br /&gt;レイアウト.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt; android:id="@+id/LinearLayout01" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"&amp;gt;&lt;br /&gt;    &amp;lt;Button &lt;br /&gt;  android:id="@+id/Button01" &lt;br /&gt;  android:layout_width="wrap_content" &lt;br /&gt;  android:layout_height="wrap_content" &lt;br /&gt;  android:drawableTop="@drawable/icon" &lt;br /&gt;  android:text="Button01"&amp;gt;&lt;br /&gt; &amp;lt;/Button&amp;gt;&lt;br /&gt; &amp;lt;Button &lt;br /&gt;  android:id="@+id/Button02" &lt;br /&gt;  android:layout_width="wrap_content" &lt;br /&gt;  android:layout_height="wrap_content" &lt;br /&gt;  android:drawableLeft="@drawable/icon" &lt;br /&gt;  android:text="Button02"&amp;gt;&lt;br /&gt; &amp;lt;/Button&amp;gt;&lt;br /&gt; &amp;lt;Button &lt;br /&gt;  android:id="@+id/Button03" &lt;br /&gt;  android:layout_width="wrap_content" &lt;br /&gt;  android:layout_height="wrap_content" &lt;br /&gt;  android:drawableRight="@drawable/icon" &lt;br /&gt;  android:text="Button03"&amp;gt;&lt;br /&gt; &amp;lt;/Button&amp;gt;&lt;br /&gt; &amp;lt;Button &lt;br /&gt;  android:id="@+id/Button04" &lt;br /&gt;  android:layout_width="wrap_content" &lt;br /&gt;  android:layout_height="wrap_content" &lt;br /&gt;  android:drawableBottom="@drawable/icon" &lt;br /&gt;  android:text="Button04"&amp;gt;&lt;br /&gt; &amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-9003647959247348287?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/9003647959247348287/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=9003647959247348287&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/9003647959247348287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/9003647959247348287'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/android_2188.html' title='Android ボタンに画像とテキストを表示する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/TK12u6-WKTI/AAAAAAAABZc/cor2IGJqiTA/s72-c/WS000000.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-5459885126376639942</id><published>2010-10-07T12:23:00.000+09:00</published><updated>2010-10-07T12:23:27.644+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android タブ画面を表示する</title><content type='html'>Tab画面を表示するには2つの方法があります。&lt;br /&gt;1,TabActivityクラスを継承する方法&lt;br /&gt;2,Activityクラスを継承する方法&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TK08UsxaSQI/AAAAAAAABZQ/aLyrXC5AlWI/s1600/WS000001.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ex="true" height="320" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TK08UsxaSQI/AAAAAAAABZQ/aLyrXC5AlWI/s320/WS000001.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1 class="category"&gt;TabActivityクラスを継承する方法&lt;/h1&gt;まずレイアウトを作成します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TK08jmyBuTI/AAAAAAAABZY/ZEZEfDDf5eU/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ex="true" height="287" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TK08jmyBuTI/AAAAAAAABZY/ZEZEfDDf5eU/s320/WS000000.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;レイアウトにはいくつか注意点があります。&lt;br /&gt;1,TabHostのidは「@android:id/tabhost」にする。&lt;br /&gt;2,TabHostにはTabWidgetを配置し、そのidは「@android:id/tabs」にする&lt;br /&gt;3,TabHostにはFrameLayoutを配置し、そのidは「@android:id/tabcontent」にする&lt;br /&gt;4,FrameLayout(tabcontent)はpaddingTopを65px～70pxに設定する。paddingTopを設定しないとタブとタブ内容が重なってしまいます。&lt;br /&gt;res/layout/main1.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;TabHost &lt;br /&gt; android:id="@android:id/tabhost" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:layout_height="fill_parent" &lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android"&amp;gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;TabWidget &lt;br /&gt;  android:id="@android:id/tabs" &lt;br /&gt;  android:layout_width="wrap_content" &lt;br /&gt;  android:layout_height="wrap_content"&amp;gt;&lt;br /&gt; &amp;lt;/TabWidget&amp;gt;&lt;br /&gt; &amp;lt;FrameLayout &lt;br /&gt;  android:id="@android:id/tabcontent" &lt;br /&gt;  android:layout_height="fill_parent" &lt;br /&gt;  android:layout_width="fill_parent" &lt;br /&gt;  android:paddingTop="65px"&amp;gt;&lt;br /&gt;  &amp;lt;LinearLayout &lt;br /&gt;   android:layout_width="wrap_content" &lt;br /&gt;   android:layout_height="wrap_content" &lt;br /&gt;   android:id="@+id/content1"&amp;gt;&lt;br /&gt;   &amp;lt;CheckBox &lt;br /&gt;    android:text="@+id/CheckBox01" &lt;br /&gt;    android:id="@+id/CheckBox01" &lt;br /&gt;    android:layout_width="wrap_content" &lt;br /&gt;    android:layout_height="wrap_content"&amp;gt;&lt;br /&gt;   &amp;lt;/CheckBox&amp;gt;&lt;br /&gt;  &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;  &amp;lt;LinearLayout &lt;br /&gt;   android:layout_width="wrap_content" &lt;br /&gt;   android:layout_height="wrap_content" &lt;br /&gt;   android:id="@+id/content2"&amp;gt;&lt;br /&gt;   &amp;lt;RadioButton &lt;br /&gt;    android:text="@+id/RadioButton01" &lt;br /&gt;    android:id="@+id/RadioButton01" &lt;br /&gt;    android:layout_width="wrap_content" &lt;br /&gt;    android:layout_height="wrap_content"&amp;gt;&lt;br /&gt;   &amp;lt;/RadioButton&amp;gt;&lt;br /&gt;  &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt; &amp;lt;/FrameLayout&amp;gt;&lt;br /&gt;&amp;lt;/TabHost&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MainActivityはTabActivityクラスを継承して作成します。&lt;br /&gt;onCreate()メソッドで、getTabHost()メソッドでTabHostオブジェクトを取得し、Tabを追加します。&lt;br /&gt;&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.TabActivity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.TabHost;&lt;br /&gt;import android.widget.TabHost.TabSpec;&lt;br /&gt;&lt;br /&gt;public class MainActivty extends TabActivity {&lt;br /&gt;    &lt;br /&gt;    private static String[] sTabId = {"Tab1","Tab2"};&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt;        // TabHostオブジェクト取得&lt;br /&gt;        TabHost tabs = getTabHost();&lt;br /&gt;&lt;br /&gt;        // Tab1 設定&lt;br /&gt;        TabSpec tab1 = tabs.newTabSpec(sTabId[0]);&lt;br /&gt;        tab1.setIndicator("タブページ１");   &lt;br /&gt;        tab1.setContent(R.id.content1); &lt;br /&gt;        tabs.addTab(tab1);    &lt;br /&gt;        &lt;br /&gt;        // Tab2 設定&lt;br /&gt;        TabSpec tab2 = tabs.newTabSpec(sTabId[1]);&lt;br /&gt;        tab2.setIndicator("タブページ2");   &lt;br /&gt;        tab2.setContent(R.id.content2); &lt;br /&gt;        tabs.addTab(tab2);    &lt;br /&gt;        &lt;br /&gt;        // 初期表示設定&lt;br /&gt;        tabs.setCurrentTab(0);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;Activityクラスを継承する作成する&lt;/h1&gt;まずレイアウトを作成します。「TabActivityクラスを継承する方法」と同じものを使用します。&lt;br /&gt;レイアウトの注意点ですが、下記のうち1は必須ではありません。&lt;br /&gt;1,TabHostのidは「@android:id/tabhost」にする。&lt;br /&gt;2,TabHostにはTabWidgetを配置し、そのidは「@android:id/tabs」にする&lt;br /&gt;3,TabHostにはFrameLayoutを配置し、そのidは「@android:id/tabcontent」にする&lt;br /&gt;4,FrameLayout(tabcontent)はpaddingTopを65px～70pxに設定する。paddingTopを設定しないとタブとタブ内容が重なってしまいます。&lt;br /&gt;&lt;br /&gt;MainActivityはActivityクラスを継承して作成します。&lt;br /&gt;onCreate()メソッドで、findViewById()メソッドでTabHostオブジェクトを取得します。&lt;br /&gt;Tabを追加する前に、tabhost#setup()メソッドでTabHostを初期化し、Tabを追加します。&lt;br /&gt;&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.TabHost;&lt;br /&gt;import android.widget.TabHost.TabSpec;&lt;br /&gt;&lt;br /&gt;public class MainActivty extends Activity {&lt;br /&gt;    &lt;br /&gt;    private static String[] sTabId = {"Tab1","Tab2"};&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt;        // TabHostオブジェクト取得&lt;br /&gt;        //TabHost tabs = getTabHost();&lt;br /&gt;        TabHost tabs = (TabHost)findViewById(android.R.id.tabhost);    &lt;br /&gt;        tabs.setup();&lt;br /&gt;        // Tab1 設定&lt;br /&gt;        TabSpec tab1 = tabs.newTabSpec(sTabId[0]);&lt;br /&gt;        tab1.setIndicator("タブページ１");   &lt;br /&gt;        tab1.setContent(R.id.content1); &lt;br /&gt;        tabs.addTab(tab1);    &lt;br /&gt;        // Tab2 設定&lt;br /&gt;        TabSpec tab2 = tabs.newTabSpec(sTabId[1]);&lt;br /&gt;        tab2.setIndicator("タブページ2");   &lt;br /&gt;        tab2.setContent(R.id.content2); &lt;br /&gt;        tabs.addTab(tab2);    &lt;br /&gt;        // 初期表示設定&lt;br /&gt;        tabs.setCurrentTab(0);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-5459885126376639942?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/5459885126376639942/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=5459885126376639942&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5459885126376639942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5459885126376639942'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/android_07.html' title='Android タブ画面を表示する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/TK08UsxaSQI/AAAAAAAABZQ/aLyrXC5AlWI/s72-c/WS000001.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4074703577300921988</id><published>2010-10-06T10:55:00.000+09:00</published><updated>2010-10-06T10:55:38.289+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android エミュレータの縦横を切り替える</title><content type='html'>エミュレータの縦表示、横表示を切り替えるには&lt;br /&gt;「Ctrl」＋「F11」キー&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKvW89ShoEI/AAAAAAAABZI/IMK6mfM3LZA/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKvW89ShoEI/AAAAAAAABZI/IMK6mfM3LZA/s320/WS000000.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKvXARnPbPI/AAAAAAAABZM/MUuRWnw7Cw4/s1600/WS000001.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="311" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKvXARnPbPI/AAAAAAAABZM/MUuRWnw7Cw4/s320/WS000001.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4074703577300921988?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4074703577300921988/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4074703577300921988&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4074703577300921988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4074703577300921988'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/android_06.html' title='Android エミュレータの縦横を切り替える'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__ZiZX_sgyy4/TKvW89ShoEI/AAAAAAAABZI/IMK6mfM3LZA/s72-c/WS000000.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8552740904354870804</id><published>2010-10-05T17:46:00.003+09:00</published><updated>2010-10-05T17:54:32.535+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android キャッチされなかった例外を処理する</title><content type='html'>Androidアプリでキャッチされなかった例外を処理する方法が下記のサイトに詳しく紹介されています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.adamrocker.com/blog/288/bug-report-system-for-android.html"&gt;throw Life - Androidアプリのバグ報告システムを考える &lt;/a&gt;&lt;br /&gt;&lt;a href="http://subtech.g.hatena.ne.jp/cho45/20100210"&gt;冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - Android でアプリケーションが強制終了したとき、エラーレポートを送るようにする&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;上記のリンクを参考に、例外のスタックトレースをメールで送信できるようにしてみます。&lt;br /&gt;&lt;br /&gt;ボタンを押すと例外が発生し、アプリは強制終了します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TKrkvCSuPpI/AAAAAAAABZA/q3TEmHD_4QE/s1600/WS000003.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TKrkvCSuPpI/AAAAAAAABZA/q3TEmHD_4QE/s320/WS000003.JPG" width="216" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;もう一度アプリを起動すると、バグレポートをメール送信するか確認メッセージを表示します。&lt;br /&gt;Postボタンをタップすると、メールを送信します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TKrk33BwbWI/AAAAAAAABZE/pZ69jflKUOk/s1600/WS000001.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TKrk33BwbWI/AAAAAAAABZE/pZ69jflKUOk/s320/WS000001.JPG" width="216" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;catchしなかった例外を補足するためにThread.UncaughtExceptionHandleを実装したCsUncaughtExceptionHandlerを作成します。&lt;br /&gt;uncaughtException()メソッドで例外のスタックトレースをファイルに書き込みます。&lt;br /&gt;SendBugReport()メソッドでファイルを読み込んでメールを送信します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;import java.io.FileReader;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;import java.lang.Thread.UncaughtExceptionHandler;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.AlertDialog;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.content.DialogInterface;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.net.Uri;&lt;br /&gt;&lt;br /&gt;public class CsUncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {&lt;br /&gt;    private static Context sContext = null;&lt;br /&gt;    private static final String BUG_FILE = "BugReport";&lt;br /&gt;    private static final UncaughtExceptionHandler sDefaultHandler &lt;br /&gt;             = Thread.getDefaultUncaughtExceptionHandler();&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * コンストラクタ&lt;br /&gt;     * @param context&lt;br /&gt;     */&lt;br /&gt;    public CsUncaughtExceptionHandler(Context context){&lt;br /&gt;        sContext = context;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * キャッチされない例外によって指定されたスレッドが終了したときに呼び出されます&lt;br /&gt;     * 例外スタックトレースの内容をファイルに出力します&lt;br /&gt;     */&lt;br /&gt;    public void uncaughtException(Thread thread, Throwable ex) { &lt;br /&gt;        PrintWriter pw = null;   &lt;br /&gt;        try {&lt;br /&gt;            pw = new PrintWriter(sContext.openFileOutput(BUG_FILE, Context.MODE_WORLD_READABLE));&lt;br /&gt;            ex.printStackTrace(pw); &lt;br /&gt;        } catch (FileNotFoundException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        } finally {&lt;br /&gt;            if (pw != null) pw.close();      &lt;br /&gt;        }&lt;br /&gt;        sDefaultHandler.uncaughtException(thread, ex);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * バグレポートの内容をメールで送信します。&lt;br /&gt;     * @param activity&lt;br /&gt;     */&lt;br /&gt;    public static void SendBugReport(final Activity activity) {&lt;br /&gt;        //バグレポートがなければ以降の処理を行いません。&lt;br /&gt;        final File bugfile = activity.getFileStreamPath(BUG_FILE);&lt;br /&gt;        if (!bugfile.exists()) {&lt;br /&gt;            return;&lt;br /&gt;        }    &lt;br /&gt;        //AlertDialogを表示します。&lt;br /&gt;        AlertDialog.Builder alert = new AlertDialog.Builder(activity);&lt;br /&gt;        alert.setTitle("ERROR");&lt;br /&gt;        alert.setMessage("予期しないエラーが発生しました。開発元にエラーを送信してください。");&lt;br /&gt;        alert.setPositiveButton("Post", new DialogInterface.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(DialogInterface dialog, int which) {&lt;br /&gt;                SendMail(activity,bugfile);&lt;br /&gt;            }});&lt;br /&gt;        alert.setNegativeButton("Cancel", null);&lt;br /&gt;        alert.show();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * バグレポートの内容をメールで送信します。&lt;br /&gt;     * @param activity&lt;br /&gt;     * @param bugfile&lt;br /&gt;     */&lt;br /&gt;    private static void SendMail(final Activity activity,File bugfile){&lt;br /&gt;        //バグレポートの内容を読み込みます。&lt;br /&gt;        StringBuilder sb = new StringBuilder();&lt;br /&gt;        try {&lt;br /&gt;            BufferedReader br = new BufferedReader(new FileReader(bugfile));&lt;br /&gt;            String str;      &lt;br /&gt;            while((str = br.readLine()) != null){      &lt;br /&gt;                sb.append(str +"\n");     &lt;br /&gt;            }       &lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;        //メールで送信します。&lt;br /&gt;        Intent intent = new Intent();&lt;br /&gt;        intent.setAction(Intent.ACTION_SENDTO);&lt;br /&gt;        intent.setData(Uri.parse("mailto:" + "xxx@xxxx.xx.xx"));&lt;br /&gt;        intent.putExtra(Intent.EXTRA_SUBJECT, "【BugReport】" + R.string.app_name );&lt;br /&gt;        intent.putExtra(Intent.EXTRA_TEXT, sb.toString());&lt;br /&gt;        activity.startActivity(intent);&lt;br /&gt;        //バグレポートを削除します。&lt;br /&gt;        bugfile.delete();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;スレッドでキャッチされなかった例外を捕捉するために、Thread.setDefaultUncaughtExceptionHandler()メソッドにCsUncaughtExceptionHandlerオブジェクトを設定します。&lt;br /&gt;アプリで1度だけハンドラを設定すればいいので、一番最初に表示されるMainActivityのonCreate()メソッドで設定します。&lt;br /&gt;CsUncaughtExceptionHandlerのコンストラクタの引数には、メモリリークが発生しないようgetApplicationContext()メソッドで取得したcontextを渡すようにします。&lt;br /&gt;※アプリケーションで共通に使用するcontextに、現在のActivityを指定するとメモリが解放されない事があります。&lt;br /&gt;こちらで詳しく書かれています。&lt;a href="http://www.textdrop.net/soft/android-avoiding-memory-leaks/"&gt;textdrop-Androidでのメモリリーク回避&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MainActivityにはボタンを1つ配置し、タップするとArithmeticExceptionを発生します。&lt;br /&gt;&lt;br /&gt;onStart()メソッドでは、CsUncaughtExceptionHandler.SendBugReport()メソッドを呼び出して、バグレポートがあればメールを送信するようにします。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //レイアウトを読み込みます&lt;br /&gt;        this.setContentView(R.layout.main);&lt;br /&gt;       &lt;br /&gt;        //アプリケーションで共通に利用するオブジェクトには、メモリリークが発生しないようにthisではなく&lt;br /&gt;        //Context.getApplicationContext()を使用します。&lt;br /&gt;        Context context = this.getApplicationContext(); &lt;br /&gt;        //キャッチされない例外により、スレッドが突然終了したときや、&lt;br /&gt;        //このスレッドに対してほかにハンドラが定義されていないときに&lt;br /&gt;        //呼び出されるデフォルトのハンドラを設定します。&lt;br /&gt;        Thread.setDefaultUncaughtExceptionHandler(new CsUncaughtExceptionHandler(context));&lt;br /&gt;&lt;br /&gt;        //ボタンにOnClickListenerを設定します。&lt;br /&gt;        Button btn = (Button)this.findViewById(R.id.btnThrowEx);&lt;br /&gt;        btn.setOnClickListener(new OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(View arg0) {&lt;br /&gt;                int index = 5 / 0;  //ArithmeticExceptionを発生させる&lt;br /&gt;            }});&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected void onStart() {&lt;br /&gt;        super.onStart();&lt;br /&gt;        CsUncaughtExceptionHandler.SendBugReport(this);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8552740904354870804?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8552740904354870804/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8552740904354870804&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8552740904354870804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8552740904354870804'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/android.html' title='Android キャッチされなかった例外を処理する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/TKrkvCSuPpI/AAAAAAAABZA/q3TEmHD_4QE/s72-c/WS000003.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8285811815830320914</id><published>2010-10-05T10:47:00.001+09:00</published><updated>2010-10-05T10:51:45.583+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android AlertDialogを表示する</title><content type='html'>&lt;h1 class="category"&gt;基本的な使い方&lt;/h1&gt;タイトルとメッセージを表示するだけの基本的なAlertDialogです。&lt;br /&gt;「戻る」ボタンで元の画面に戻ります。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKp-5ZlfcVI/AAAAAAAABYA/yueyVmveWxk/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKp-5ZlfcVI/AAAAAAAABYA/yueyVmveWxk/s320/1.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.AlertDialog;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;              &lt;br /&gt;        AlertDialog.Builder alert = new AlertDialog.Builder(this);&lt;br /&gt;        alert.setTitle("Title");&lt;br /&gt;        alert.setMessage("Message");&lt;br /&gt;        alert.show();&lt;br /&gt;    }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;OKダイアログ&lt;/h1&gt;次にOKボタンを表示し、ダイアログを閉じられるようにします。&lt;br /&gt;OKボタンをクリックしたときに画面を閉じるだけの場合、setPositiveButton()メソッドの第2引数をnullにします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TKqAp7T5arI/AAAAAAAABYk/7Ct20YY4Z_Q/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TKqAp7T5arI/AAAAAAAABYk/7Ct20YY4Z_Q/s320/2.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.AlertDialog;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;              &lt;br /&gt;        AlertDialog.Builder alert = new AlertDialog.Builder(this);&lt;br /&gt;        alert.setTitle("Title");&lt;br /&gt;        alert.setMessage("Message");&lt;br /&gt;        alert.setPositiveButton("OK", null);&lt;br /&gt;        alert.show();&lt;br /&gt;    }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;Yes/Noダイアログ&lt;/h1&gt;Yesボタンを押したときの処理はsetPositiveButton()メソッドの第2引数にDialogInterface.OnClickListenerを設定して、処理を記述します。&lt;br /&gt;Noボタンを押したときの処理はsetNegativeButton()メソッドの第2引数にDialogInterface.OnClickListenerを設定して、処理を記述します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TKqA5p6EeSI/AAAAAAAABYo/TkqY3-kSsiU/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TKqA5p6EeSI/AAAAAAAABYo/TkqY3-kSsiU/s320/3.JPG" width="214" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.AlertDialog;&lt;br /&gt;import android.content.DialogInterface;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;              &lt;br /&gt;        AlertDialog.Builder alert = new AlertDialog.Builder(this);&lt;br /&gt;        alert.setTitle("Title");&lt;br /&gt;        alert.setMessage("Message");&lt;br /&gt;        alert.setPositiveButton("Yes", new DialogInterface.OnClickListener(){&lt;br /&gt;            public void onClick(DialogInterface dialog, int which) {&lt;br /&gt;                //Yesボタンが押された時の処理&lt;br /&gt;                Toast.makeText(MainActivity.this, "Yes Clicked!", Toast.LENGTH_LONG).show();&lt;br /&gt;            }});&lt;br /&gt;        alert.setNegativeButton("No", new DialogInterface.OnClickListener(){&lt;br /&gt;            public void onClick(DialogInterface dialog, int which) {&lt;br /&gt;                //Noボタンが押された時の処理&lt;br /&gt;                Toast.makeText(MainActivity.this, "No Clicked!", Toast.LENGTH_LONG).show();&lt;br /&gt;            }});&lt;br /&gt;        alert.show();&lt;br /&gt;    }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;Yes/No/Cancelダイアログ&lt;/h1&gt;先ほどのYes/Noダイアログでは、setNegativeButton()メソッドにNoボタンを設定しましたが、&lt;br /&gt;Yesボタン、Noボタン、Cancelボタンの順にボタンを配置したい場合は、&lt;br /&gt;YesボタンはsetPositiveButton()、NoボタンはsetNeutralButton()、CancelボタンはsetNegativeButton()に処理を記述します。&lt;br /&gt;setPositiveButton()メソッドで設定したボタンは一番左、setNeutralButton()メソッドで設定したボタンは中央、setNegativeButton()メソッドで設定したボタンは一番右に配置されます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKqBJ8UOH_I/AAAAAAAABYs/cevd6p3KAb4/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKqBJ8UOH_I/AAAAAAAABYs/cevd6p3KAb4/s320/4.JPG" width="216" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.AlertDialog;&lt;br /&gt;import android.content.DialogInterface;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;              &lt;br /&gt;        AlertDialog.Builder alert = new AlertDialog.Builder(this);&lt;br /&gt;        alert.setTitle("Title");&lt;br /&gt;        alert.setMessage("Message");&lt;br /&gt;        alert.setPositiveButton("Yes", new DialogInterface.OnClickListener(){&lt;br /&gt;            public void onClick(DialogInterface dialog, int which) {&lt;br /&gt;                //Yesボタンが押された時の処理&lt;br /&gt;                Toast.makeText(MainActivity.this, "Yes Clicked!", Toast.LENGTH_LONG).show();&lt;br /&gt;            }});&lt;br /&gt;            alert.setNeutralButton("No", new DialogInterface.OnClickListener(){&lt;br /&gt;            public void onClick(DialogInterface dialog, int which) {&lt;br /&gt;                //Noボタンが押された時の処理&lt;br /&gt;                Toast.makeText(MainActivity.this, "No Clicked!", Toast.LENGTH_LONG).show();&lt;br /&gt;            }});&lt;br /&gt;        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){&lt;br /&gt;            public void onClick(DialogInterface dialog, int which) {&lt;br /&gt;                //Cancelボタンが押された時の処理&lt;br /&gt;    Toast.makeText(MainActivity.this, "Cancel Clicked!", Toast.LENGTH_LONG).show();&lt;br /&gt;   }});&lt;br /&gt;     alert.show();&lt;br /&gt;    }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;ダイアログにリストを表示する&lt;/h1&gt;setItems()メソッドを使って、ダイアログにリストを表示させる事ができます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TKqBU_-NDUI/AAAAAAAABYw/JudjXEJCWcI/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TKqBU_-NDUI/AAAAAAAABYw/JudjXEJCWcI/s320/5.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.AlertDialog;&lt;br /&gt;import android.content.DialogInterface;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;              &lt;br /&gt;        final String[] items = {"item1","item2","item3"};&lt;br /&gt;        AlertDialog.Builder alert = new AlertDialog.Builder(this);&lt;br /&gt;        alert.setTitle("Title");&lt;br /&gt;        alert.setItems(items, new DialogInterface.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(DialogInterface dialog, int idx) {&lt;br /&gt;                // リストアイテムを選択したときの処理&lt;br /&gt;                Toast.makeText(MainActivity.this, String.format("%s Selected", items[idx]), Toast.LENGTH_LONG).show();&lt;br /&gt;            }});&lt;br /&gt;        alert.show();&lt;br /&gt;    }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;ダイアログにラジオボタン付きのリストを表示する&lt;/h1&gt;setSingleChoiceItems()メソッドを使って、ダイアログにラジオボタン付きのリストを表示できます。&lt;br /&gt;setSingleChoiceItems()メソッドの第1引数にはリストに表示する項目の配列、第2引数には選択するラジオボタンの初期値を指定します。初期値に-1を選択すると何も選択されません。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TKqBnyDb_sI/AAAAAAAABY0/Te92QyEN83Q/s1600/6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TKqBnyDb_sI/AAAAAAAABY0/Te92QyEN83Q/s320/6.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.AlertDialog;&lt;br /&gt;import android.content.DialogInterface;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    &lt;br /&gt;    private int mCheckedItem = -1;&lt;br /&gt; &lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;               &lt;br /&gt;        final String[] items = {"item1","item2","item3"};&lt;br /&gt;        AlertDialog.Builder alert = new AlertDialog.Builder(this);&lt;br /&gt;        alert.setTitle("Title");&lt;br /&gt;        alert.setSingleChoiceItems(items,mCheckedItem,new DialogInterface.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(DialogInterface dialog, int which) {&lt;br /&gt;                Toast.makeText(MainActivity.this, String.format("%s Selected", items[which]), Toast.LENGTH_LONG).show();&lt;br /&gt;                mCheckedItem = which;&lt;br /&gt;            }});&lt;br /&gt;        alert.setPositiveButton("OK", new  DialogInterface.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(DialogInterface dialog, int which) {&lt;br /&gt;                Toast.makeText(MainActivity.this, String.format("%s Selected", items[mCheckedItem]), Toast.LENGTH_LONG).show();&lt;br /&gt;            }});&lt;br /&gt;        alert.show();&lt;br /&gt;    }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;ダイアログにチェックボックス付きのリストを表示する&lt;/h1&gt;setMultiChoiceItems()メソッドを使って、複数選択できるチェックボックス付きのリストを表示することができます。&lt;br /&gt;setMultiChoiceItems()メソッドの第1引数にはリストに表示する項目の配列、第2引数には選択するチェックボックスの初期値を論理値配列で指定します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKqB3JQfl1I/AAAAAAAABY4/WQBTUv3juD0/s1600/7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKqB3JQfl1I/AAAAAAAABY4/WQBTUv3juD0/s320/7.JPG" width="215" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.AlertDialog;&lt;br /&gt;import android.content.DialogInterface;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    &lt;br /&gt;    private boolean[] mCheckedItems = {true,false,true};&lt;br /&gt; &lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;               &lt;br /&gt;        final String[] items = {"item1","item2","item3"};&lt;br /&gt;        AlertDialog.Builder alert = new AlertDialog.Builder(this);&lt;br /&gt;        alert.setTitle("Title");&lt;br /&gt;        alert.setMultiChoiceItems(items, mCheckedItems, new DialogInterface.OnMultiChoiceClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(DialogInterface dialog, int which, boolean isChecked) {&lt;br /&gt;                mCheckedItems[which] = isChecked; &lt;br /&gt;            }});&lt;br /&gt;        alert.setPositiveButton("OK", new  DialogInterface.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(DialogInterface dialog, int idx) {&lt;br /&gt;                String str =  null;&lt;br /&gt;                for (int i = 0; i &amp;lt; mCheckedItems.length; i++){&lt;br /&gt;                    if (mCheckedItems[i] == true){&lt;br /&gt;                        str += items[i];&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                if (str == null){&lt;br /&gt;                    str = "No Selected";&lt;br /&gt;                }&lt;br /&gt;                Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();&lt;br /&gt;            }});&lt;br /&gt;        alert.show();&lt;br /&gt;    }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h1 class="category"&gt;独自のレイアウトを表示する&lt;/h1&gt;AlertDialogに独自のレイアウトを表示することもできます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKqCFEymX6I/AAAAAAAABY8/cAB8nBq9nF8/s1600/8.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TKqCFEymX6I/AAAAAAAABY8/cAB8nBq9nF8/s320/8.JPG" width="214" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;まずAlertDialogに表示するレイアウトを作成します。 &lt;br /&gt;EditTextを１つ配置したレイアウトを作成しました。&lt;br /&gt;res/layout/alert.xml &lt;br /&gt;&lt;pre class="java" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout&lt;br /&gt;xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;android:layout_width="wrap_content"&lt;br /&gt;android:layout_height="wrap_content"&amp;gt;&lt;br /&gt;  &lt;br /&gt; &amp;lt;EditText android:id="@+id/EditText01" &lt;br /&gt; android:layout_height="wrap_content" &lt;br /&gt; android:layout_width="fill_parent"&amp;gt;&lt;br /&gt; &amp;lt;/EditText&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;LayoutInflaterクラスを使用して、レイアウトからViewを作成し、AlertDialog#setView()メソッドでViewを設定します。 &lt;br /&gt;MainActivity.java &lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.app.AlertDialog;&lt;br /&gt;import android.content.DialogInterface;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.LayoutInflater;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity { &lt;br /&gt;  &lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        &lt;br /&gt;        AlertDialog.Builder alert = new AlertDialog.Builder(this);&lt;br /&gt;        alert.setTitle("Title");&lt;br /&gt;        //LayoutInflaterクラスを使用して、レイアウトからViewを作成します。&lt;br /&gt;        LayoutInflater inflater = LayoutInflater.from(this);&lt;br /&gt;        final View viw = inflater.inflate(R.layout.alert,null);  &lt;br /&gt;        //AlertDialogにビューを設定します。&lt;br /&gt;        alert.setView(viw);   &lt;br /&gt;        alert.setPositiveButton("OK", new  DialogInterface.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(DialogInterface dialog, int idx) {&lt;br /&gt;                EditText txt = (EditText)viw.findViewById(R.id.EditText01);&lt;br /&gt;                Toast.makeText(MainActivity.this,txt.getText(),Toast.LENGTH_LONG).show();&lt;br /&gt;            }});&lt;br /&gt;        alert.show();&lt;br /&gt;    }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8285811815830320914?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8285811815830320914/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8285811815830320914&amp;isPopup=true' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8285811815830320914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8285811815830320914'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/10/android-alertdialog.html' title='Android AlertDialogを表示する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__ZiZX_sgyy4/TKp-5ZlfcVI/AAAAAAAABYA/yueyVmveWxk/s72-c/1.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-729555154711818553</id><published>2010-09-30T20:51:00.003+09:00</published><updated>2010-11-24T15:15:15.124+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android SQLiteデータベースを作成する（SQL文をリソースファイルに定義する）</title><content type='html'>&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlite.html"&gt;Android SQLiteデータベースを作成する &lt;/a&gt;では、onCreate()メソッドで実行するSQL文をハードコーディングしていました。&lt;br /&gt;1～2つのテーブルならアリかもしれませんが、テーブル数が多いのでsql文をリソースファイルに定義したいと思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;assets\sql\createフォルダにCREATE TABLE文を定義したsqlを配置します。&lt;br /&gt;assets\sql\dropフォルダにDROP TABLE文を定義したsqlを配置します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TKR3r4yO1FI/AAAAAAAABX0/bofWsXuoGbo/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TKR3r4yO1FI/AAAAAAAABX0/bofWsXuoGbo/s320/1.JPG" width="277" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;assets\sql\create\categories.sql&lt;br /&gt;初期データを追加するInsert文も定義しています。sql文の区切りは「/」にしました。&lt;br /&gt;&lt;pre name="code" class="sql"&gt;CREATE TABLE Categories&lt;br /&gt;(&lt;br /&gt; CategoryID   integer PRIMARY KEY,&lt;br /&gt; CategoryName  text NOT NULL,&lt;br /&gt; Description   text&lt;br /&gt;) &lt;br /&gt;/&lt;br /&gt;INSERT INTO Categories&lt;br /&gt;(CategoryID,CategoryName,Description)&lt;br /&gt;values&lt;br /&gt;(1,"飲料","")&lt;br /&gt;/&lt;br /&gt;INSERT INTO Categories&lt;br /&gt;(CategoryID,CategoryName,Description)&lt;br /&gt;values&lt;br /&gt;(2,"香辛料","")&lt;br /&gt;/&lt;br /&gt;INSERT INTO Categories&lt;br /&gt;(CategoryID,CategoryName,Description)&lt;br /&gt;values&lt;br /&gt;(3,"加工食品","")&lt;br /&gt;&lt;/pre&gt;assets\sql\create\products.sql&lt;br /&gt;&lt;pre name="code" class="sql"&gt;CREATE TABLE Products&lt;br /&gt;(&lt;br /&gt; ProductsID   integer PRIMARY KEY,&lt;br /&gt; ProductsName  text NOT NULL,&lt;br /&gt; CategoryID   integer NOT NULL&lt;br /&gt;) &lt;br /&gt;&lt;/pre&gt;assets\sql\drop\categories.sql&lt;br /&gt;&lt;pre name="code" class="sql"&gt;DROP TABLE Categories&lt;br /&gt;&lt;/pre&gt;assets\sql\drop\products.sql&lt;br /&gt;&lt;pre name="code" class="sql"&gt;DROP TABLE Products&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre name="code" class="java"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;  &lt;br /&gt;public class MainActivity extends Activity {   &lt;br /&gt;      &lt;br /&gt;    @Override  &lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {   &lt;br /&gt;        super.onCreate(savedInstanceState);   &lt;br /&gt;        setContentView(R.layout.main);  &lt;br /&gt;        &lt;br /&gt;        //データベースヘルパーのインスタンスを作成する（まだデータベースはできない）   &lt;br /&gt;        DatabaseHelper dbHelper = new DatabaseHelper(this);   &lt;br /&gt;        //データベースオブジェクトを取得する（データベースにアクセスすると作成される。）   &lt;br /&gt;        SQLiteDatabase db = dbHelper.getWritableDatabase();    &lt;br /&gt;        //データベースを閉じる   &lt;br /&gt;        db.close();       &lt;br /&gt;    }   &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;DatabaseHelper.java&lt;br /&gt;&lt;pre name="code" class="java"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.content.res.AssetManager;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.database.sqlite.SQLiteOpenHelper;&lt;br /&gt;&lt;br /&gt;public class DatabaseHelper extends SQLiteOpenHelper {&lt;br /&gt; &lt;br /&gt;    /* データベース名 */&lt;br /&gt;    private final static String DB_NAME = "androidstudydb";&lt;br /&gt;    /* データベースのバージョン */&lt;br /&gt;    private final static int DB_VER = 2;    &lt;br /&gt;    /* コンテキスト */&lt;br /&gt;    private Context mContext; &lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * コンストラクタ&lt;br /&gt;     */&lt;br /&gt;    public DatabaseHelper(Context context) {&lt;br /&gt;        super(context, DB_NAME, null, DB_VER);&lt;br /&gt;        mContext = context;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * データベースが作成された時に呼ばれます。&lt;br /&gt;     * assets/sql/create内に定義されているsqlを実行します。&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(SQLiteDatabase db) {     &lt;br /&gt;        try {&lt;br /&gt;            execSql(db,"sql/create");&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }    &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * データベースをバージョンアップした時に呼ばれます。&lt;br /&gt;     * assets/sql/drop内に定義されているsqlを実行します。&lt;br /&gt;     * その後onCreate()メソッドを呼び出します。&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {   &lt;br /&gt;        try {&lt;br /&gt;            execSql(db,"sql/drop");&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;        onCreate(db);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * 引数に指定したassetsフォルダ内のsqlを実行します。&lt;br /&gt;     * @param db データベース&lt;br /&gt;     * @param assetsDir assetsフォルダ内のフォルダのパス&lt;br /&gt;     * @throws IOException&lt;br /&gt;     */&lt;br /&gt;    private void execSql(SQLiteDatabase db,String assetsDir) throws IOException {&lt;br /&gt;        AssetManager as = mContext.getResources().getAssets();    &lt;br /&gt;        try {&lt;br /&gt;            String files[] = as.list(assetsDir);&lt;br /&gt;            for (int i = 0; i &amp;lt; files.length; i++) {    &lt;br /&gt;                String str = readFile(as.open(assetsDir + "/" + files[i]));&lt;br /&gt;                for (String sql: str.split("/")){&lt;br /&gt;                    db.execSQL(sql);&lt;br /&gt;                } &lt;br /&gt;            }&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * ファイルから文字列を読み込みます。&lt;br /&gt;     * @param is&lt;br /&gt;     * @return ファイルの文字列&lt;br /&gt;     * @throws IOException&lt;br /&gt;     */&lt;br /&gt;    private String readFile(InputStream is) throws IOException{&lt;br /&gt;        BufferedReader br = null;&lt;br /&gt;        try {&lt;br /&gt;            br = new BufferedReader(new InputStreamReader(is,"SJIS"));&lt;br /&gt;&lt;br /&gt;            StringBuilder sb = new StringBuilder();    &lt;br /&gt;            String str;      &lt;br /&gt;            while((str = br.readLine()) != null){      &lt;br /&gt;                sb.append(str +"\n");     &lt;br /&gt;            }    &lt;br /&gt;            return sb.toString();&lt;br /&gt;        } finally {&lt;br /&gt;            if (br != null) br.close();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TKR4Q3gf8iI/AAAAAAAABX8/UJ2Ybn5CzUk/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" px="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TKR4Q3gf8iI/AAAAAAAABX8/UJ2Ybn5CzUk/s320/2.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlite.html"&gt;Android SQLiteデータベースを作成する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitegui.html"&gt;Android SQLiteのGUIツール &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-insertupdatedelete.html"&gt;Android データベースにデータを書き込む（Insert、Update、Delete）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-select.html"&gt;Android データベースのデータを読み込む（Select)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitesql.html"&gt;Android SQLiteデータベースを作成する（SQL文をリソースファイルに定義する） &lt;/a&gt; &lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-resrawassets.html"&gt;Android ファイル読み込み（res/rawフォルダ、assetsフォルダ) &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-729555154711818553?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/729555154711818553/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=729555154711818553&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/729555154711818553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/729555154711818553'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-sqlitesql.html' title='Android SQLiteデータベースを作成する（SQL文をリソースファイルに定義する）'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/TKR3r4yO1FI/AAAAAAAABX0/bofWsXuoGbo/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-6608363902526405887</id><published>2010-09-24T19:21:00.004+09:00</published><updated>2010-10-01T09:47:07.949+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android apkに書き込み可能なファイルを含める</title><content type='html'>apkに任意のファイルを含めてインストールし、プログラムから書き込み可能に出来ないかと調べてみました。&lt;br /&gt;&lt;br /&gt;やりたい事は、apkにテキストファイルを含めて、インストール時にfilesフォルダに配置したかったのですが、&lt;br /&gt;&lt;a href="http://groups.google.co.jp/group/android-group-japan/browse_thread/thread/567326c74ebade70"&gt;日本Androidの会 apkにファイルを含める&lt;/a&gt;によると、直接filesフォルダに展開することはムリっぽいです。&lt;br /&gt;かわりにres/rawにテキストファイルを含めて、初回起動時にfilesフォルダにコピーする方法が紹介されていました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;res/raw/test.txtをfilesフォルダにコピーします。&lt;br /&gt;初回起動時はfiles/test.txtが存在しない場合としました。&lt;br /&gt;&lt;pre name="code" class="java"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.BufferedWriter;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.io.OutputStreamWriter;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.res.Resources;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //レイアウトの読み込み&lt;br /&gt;        this.setContentView(R.layout.main);&lt;br /&gt;        //filesフォルダにtest.txtが存在しなければ、res/raw/test.txtをコピーする。&lt;br /&gt;        File file = this.getFileStreamPath("test.txt");&lt;br /&gt;        if ( file.exists() == false ) {&lt;br /&gt;            Resources res = this.getResources();&lt;br /&gt;            try {&lt;br /&gt;                fileCopy(res.openRawResource(R.raw.test),openFileOutput(file.getName(),MODE_PRIVATE));&lt;br /&gt;            } catch (IOException e) {&lt;br /&gt;                e.printStackTrace();&lt;br /&gt;            }   &lt;br /&gt;        } &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    private void fileCopy(InputStream is , OutputStream os )throws IOException{&lt;br /&gt;        BufferedReader br = null;&lt;br /&gt;        BufferedWriter bw = null;&lt;br /&gt;        try {&lt;br /&gt;            br = new BufferedReader(new InputStreamReader(is));    &lt;br /&gt;            bw = new BufferedWriter(new OutputStreamWriter(os));   &lt;br /&gt;&lt;br /&gt;            String str;      &lt;br /&gt;            while((str = br.readLine()) != null){      &lt;br /&gt;                bw.append(str +"\n");     &lt;br /&gt;            } &lt;br /&gt;            bw.flush();   &lt;br /&gt;        } finally {   &lt;br /&gt;            if (br != null) br.close();&lt;br /&gt;            if (bw != null)bw.close();       &lt;br /&gt;        }  &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-6608363902526405887?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/6608363902526405887/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=6608363902526405887&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6608363902526405887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6608363902526405887'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-apk.html' title='Android apkに書き込み可能なファイルを含める'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-1356096216319766003</id><published>2010-09-24T17:44:00.000+09:00</published><updated>2010-09-24T17:44:07.983+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android コーディング規約</title><content type='html'>Androidのコーティング規約です。&lt;br /&gt;&lt;a href="http://www.textdrop.net/android/code-style-ja.html"&gt;コントリビュータのためのAndroidコードスタイルガイドライン 日本語訳&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;一部抜粋です。&lt;br /&gt;1.コメント/Javadoc: コメント/Javadocを書いてください。そこでは標準のスタイルを使ってください。&lt;br /&gt;2.簡潔なメソッド: 巨大なメソッドを書いてはいけません。&lt;br /&gt;3.フィールド: フィールドはファイルの先頭か、フィールドを使うメソッドの直前に書いてください。&lt;br /&gt;4.ローカル変数: ローカル変数のスコープは限定するようにしてください。&lt;br /&gt;5.インポート: android関連; サードパーティ製（アルファベット順）; java(x) という順序でインポートしてください。&lt;br /&gt;6.インデント: インデントにはスペース4つを使ってください。タブを使ってはいけません。&lt;br /&gt;7.行の長さ: 1行は100カラムまでにしてください。&lt;br /&gt;8.フィールド名: 非パブリック、非スタティックフィールドは m で始めてください。&lt;br /&gt;9.中括弧: 開き中括弧で行を始めてはいけません。&lt;br /&gt;10.アノテーション: 標準のアノテーションを使ってください。&lt;br /&gt;11.頭字語（アクロニム）は単語: 名前では頭字語を単語として扱ってください。例えば、XmlHttpRequest、getUrl() など。&lt;br /&gt;12.TODOのスタイル: 「TODO: こんな風に書いてください」&lt;br /&gt;13.一貫性: まわりをよく見てください！&lt;br /&gt;14.ログ記録: ログを記録するときには注意してください。ログにもコストがかかるのです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-1356096216319766003?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/1356096216319766003/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=1356096216319766003&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1356096216319766003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1356096216319766003'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_5336.html' title='Android コーディング規約'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4115526782566318178</id><published>2010-09-24T12:52:00.001+09:00</published><updated>2010-10-01T09:29:23.849+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android ファイルの存在チェック</title><content type='html'>Androidではファイル名（パスを含まない）だけで、ファイルの書き込み、読み込みができます。&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-files.html"&gt;Android ファイルの入出力（filesフォルダ) &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ファイルの存在チェックもパスはいらないだろうと思っていたら、こちらはパスがいるのですね・・・&lt;br /&gt;&lt;pre name="code" class="java"&gt;String filepath = this.getFilesDir().getAbsolutePath() + "/" +  "test.txt";&lt;br /&gt;File file = new File(filepath);&lt;br /&gt;boolean isExists = file.exists();&lt;br /&gt;&lt;/pre&gt;又は&lt;br /&gt;&lt;pre name="code" class="java"&gt;File file = this.getFileStreamPath("test.txt");&lt;br /&gt;boolean isExists = file.exists();&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4115526782566318178?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4115526782566318178/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4115526782566318178&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4115526782566318178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4115526782566318178'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_24.html' title='Android ファイルの存在チェック'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4716276853425802325</id><published>2010-09-23T16:12:00.004+09:00</published><updated>2010-09-23T16:23:57.818+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android リソースの種類と定義場所</title><content type='html'>resフォルダには色々なリソースファイルを配置しますが、リソースの種類により配置場所が決まっています。&lt;br /&gt;&lt;br /&gt;&lt;table id="table-01" width="100%"&gt;&lt;tr&gt;&lt;th width="10%"&gt;名前&lt;/th&gt;&lt;th width="90%"&gt;説明&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/anim/xxx.xml&lt;/td&gt;&lt;td&gt;フレームアニメーションやTweenedアニメーションを定義したXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/drawable&lt;/td&gt;&lt;td&gt;イメージファイル（.png、.9.png、.jpg）&lt;br /&gt;デフォルトでdrawable-hdpi、drawable-ldpi、drawable-mdpiのディレクトリが作成されており、各ディレクトリに同じ名前のイメージファイルを配置する事で解像度によって使用するイメージを自動で切り替える事ができます。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/layout/xxx.xml&lt;/td&gt;&lt;td&gt;画面レイアウトを定義したXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/menu/xxx.xml&lt;/td&gt;&lt;td&gt;メニュー（オプションメニュー、コンテキストメニュー、サブメニュー）を定義したXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/values/arrays.xml&lt;/td&gt;&lt;td&gt;配列を定義したXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/values/attrs.xml&lt;/td&gt;&lt;td&gt;カスタムレイアウトを定義したXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/values/colors.xml&lt;/td&gt;&lt;td&gt;色を定義したXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/values/dimens.xml&lt;/td&gt;&lt;td&gt;寸法を定義したXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/values/ids.xml&lt;/td&gt;&lt;td&gt;IDを定義したXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/values/strings.xml&lt;/td&gt;&lt;td&gt;文字列を定義したXMLファイル&lt;br /&gt;res/values-en/strings.xml、res/values-fr/strings.xml、res/values-ja/strings.xmlなどと言語コードをつけることで、ロケールにより自動で文字列を切り替える事ができます。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/values/styles.xml&lt;/td&gt;&lt;td&gt;スタイルを定義したXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/xml&lt;/td&gt;&lt;td&gt;任意のXMLファイル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;res/raw&lt;/td&gt;&lt;td&gt;任意のファイル（音楽データなどコンパイルせずにアプリケーションに含めたいファイルなど）&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4716276853425802325?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4716276853425802325/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4716276853425802325&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4716276853425802325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4716276853425802325'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_23.html' title='Android リソースの種類と定義場所'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-3069272127437913826</id><published>2010-09-23T14:02:00.009+09:00</published><updated>2010-09-30T20:50:10.623+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android アプリ設定画面を作成する PreferenceScreen（別アクティビティ）</title><content type='html'>&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;ではPreferenceScreenをクリックすると、同じアクティビティの別画面を開きました。&lt;br /&gt;&lt;br /&gt;今回はPreferenceScreenをクリックすると、別のアクティビティを開きます。&lt;br /&gt;Intentを使って別のアクティビティを開く方法は下記を見てください。&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_06.html"&gt;Android 別のアクティビティを開く(戻り値を受け取らない） &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_4530.html"&gt;Android 別のアクティビティを開く（戻り値を受け取る） &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;まず、PreferenceScreenをクリックしたときに、開くアクティビティを作成します。&lt;/b&gt;&lt;br /&gt;作り方はコチラ&lt;a href="http://yan-note.blogspot.com/2010/09/android_2905.html"&gt;Android プロジェクトに新しいアクティビティを追加する &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Activityを継承し、TextViewを1つ配置しただけの「SubActivity」を用意しました。&lt;br /&gt;res/layout/sub.xml(SubActivityのレイアウト）&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent" &amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt; android:text="@+id/TextView01" &lt;br /&gt; android:layout_width="wrap_content" &lt;br /&gt; android:layout_height="wrap_content" &lt;br /&gt; android:id="@+id/label"&amp;gt;&lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;SubActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class SubActivity extends Activity {&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.sub);  &lt;br /&gt;        //受け取った値をTextViewに表示する&lt;br /&gt;        TextView label = (TextView)findViewById(R.id.label);&lt;br /&gt;        Intent intent = getIntent();&lt;br /&gt;        Bundle extra = intent.getExtras();&lt;br /&gt;        String str = null;&lt;br /&gt;        if (extra != null){&lt;br /&gt;            str = extra.getString("arg1") + "\n"; &lt;br /&gt;            if (extra.containsKey("arg2")){&lt;br /&gt;                str += extra.getString("arg2");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        label.setText(str);&lt;br /&gt;        //遷移元に値を返す。&lt;br /&gt;        Intent result = new Intent();&lt;br /&gt;        result.putExtra("result", "From SubActivity Result");&lt;br /&gt;        setResult(RESULT_OK,result);   &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;PreferenceActivityを継承したMainActivityから、PreferenceScreenをクリックしたときに別のアクティビティを開く方法はいくつかあります。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;まずはPreferenceScreenのxml定義にintentを記述する方法です。&lt;/b&gt;&lt;br /&gt;intentタグのtargetPackageにパッケージ名を指定し、targetClassに遷移するアクティビティを指定します。&lt;br /&gt;extraタグで遷移するアクティビティに値を渡す事ができます。&lt;br /&gt;res/xml/mainpref.xml(MainActivityのレイアウト）&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;PreferenceScreen&lt;br /&gt;  xmlns:android="http://schemas.android.com/apk/res/android"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;PreferenceScreen&lt;br /&gt;        android:key="@string/prefScreen1"&lt;br /&gt;        android:summary="xmlでIntentを飛ばす"&lt;br /&gt;        android:title="PreferenceScreen1" &amp;gt;&lt;br /&gt;         &amp;lt;intent&lt;br /&gt;          android:action="android.intent.action.MAIN"&lt;br /&gt;          android:targetPackage="my.study.android"&lt;br /&gt;          android:targetClass="my.study.android.SubActivity" &amp;gt;&lt;br /&gt;      &amp;lt;extra android:name="arg1" android:value="prefscreen1: arg1 = from xml" /&amp;gt;&lt;br /&gt;     &amp;lt;/intent&amp;gt;&lt;br /&gt;    &amp;lt;/PreferenceScreen&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/PreferenceScreen&amp;gt;&lt;br /&gt;&lt;/pre&gt;遷移するアクティビティに渡す値をコードから追加する場合は、PreferenceScreen#getIntent()メソッドでIntentオブジェクトを取得し&lt;br /&gt;Intent#putExtra()メソッドで値を追加します。&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.preference.Preference;&lt;br /&gt;import android.preference.PreferenceActivity;&lt;br /&gt;import android.preference.PreferenceScreen;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends PreferenceActivity {&lt;br /&gt; &lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //xmlレイアウトの読み込み&lt;br /&gt;        this.addPreferencesFromResource(R.xml.mainpref);&lt;br /&gt;        //PreferenceScreen1&lt;br /&gt;        CharSequence csScreenPref1 = getText(R.string.prefScreen1);&lt;br /&gt;        PreferenceScreen screenPref1 = (PreferenceScreen)findPreference(csScreenPref1);&lt;br /&gt;        Intent intent1 = screenPref1.getIntent();&lt;br /&gt;        intent1.putExtra("arg2", "prefscreen1: arg2 = from code");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;次はPreferenceScreenにコードでintentを記述し設定する方法です。&lt;/b&gt;&lt;br /&gt;res/xml/mainpref.xml(MainActivityのレイアウト）&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;PreferenceScreen&lt;br /&gt;  xmlns:android="http://schemas.android.com/apk/res/android"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;PreferenceScreen &lt;br /&gt;        android:summary="コードでIntentを設定する"&lt;br /&gt;        android:title="PreferenceScreen2"&lt;br /&gt;        android:key="@string/prefScreen2"&amp;gt;&lt;br /&gt;    &amp;lt;/PreferenceScreen&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/PreferenceScreen&amp;gt;&lt;br /&gt;&lt;/pre&gt;intentオブジェクトを作成し、PreferenceScreen#setIntent()メソッドでPreferenceScreenに設定します。&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.preference.Preference;&lt;br /&gt;import android.preference.PreferenceActivity;&lt;br /&gt;import android.preference.PreferenceScreen;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends PreferenceActivity {&lt;br /&gt; &lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //xmlレイアウトの読み込み&lt;br /&gt;        this.addPreferencesFromResource(R.xml.mainpref);&lt;br /&gt;  &lt;br /&gt;        //PreferenceScreen2&lt;br /&gt;        CharSequence csScreenPref2 = getText(R.string.prefScreen2);&lt;br /&gt;        PreferenceScreen screenPref2 = (PreferenceScreen)findPreference(csScreenPref2);&lt;br /&gt;        Intent intent2 = new Intent(this,SubActivity.class);&lt;br /&gt;        intent2.putExtra("arg1", "prefscreen2: arg1 = from code");&lt;br /&gt;        screenPref2.setIntent(intent2);&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;この2つの方法は遷移先のアクティビティに値を渡すことができますが、遷移先のアクティビティから値を受け取ることができません。&lt;br /&gt;遷移先のアクティビティから戻ってきたときはonResume()が発生します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;次はPreferenceScreenのoOnPreferenceClickListenerをハンドルし、startActivityForResultでアクティビティを開く方法です。&lt;/b&gt;&lt;br /&gt;この方法はonActivityResult()が発生し、遷移先のアクティビティから値を受け取ることができます。&lt;br /&gt;もちろんonResume()も発生します。&lt;br /&gt;res/xml/mainpref.xml(MainActivityのレイアウト）&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;PreferenceScreen&lt;br /&gt;  xmlns:android="http://schemas.android.com/apk/res/android"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;PreferenceScreen &lt;br /&gt;        android:summary="onClickでIActivityを開く"&lt;br /&gt;        android:title="PreferenceScreen3"&lt;br /&gt;        android:key="@string/prefScreen3"&amp;gt;&lt;br /&gt;    &amp;lt;/PreferenceScreen&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/PreferenceScreen&amp;gt;&lt;br /&gt;&lt;/pre&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.preference.Preference;&lt;br /&gt;import android.preference.PreferenceActivity;&lt;br /&gt;import android.preference.PreferenceScreen;&lt;br /&gt;import android.preference.Preference.OnPreferenceClickListener;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends PreferenceActivity {&lt;br /&gt; &lt;br /&gt;    private static final int SUBACTIVITY = 1; &lt;br /&gt; &lt;br /&gt;    private PreferenceScreen _screenPref3;&lt;br /&gt; &lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //xmlレイアウトの読み込み&lt;br /&gt;        this.addPreferencesFromResource(R.xml.mainpref);&lt;br /&gt;        //PreferenceScreen3&lt;br /&gt;        CharSequence csScreenPref3 = getText(R.string.prefScreen3);&lt;br /&gt;        _screenPref3 = (PreferenceScreen)findPreference(csScreenPref3);&lt;br /&gt;        _screenPref3.setOnPreferenceClickListener(new OnPreferenceClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public boolean onPreferenceClick(Preference pref) {&lt;br /&gt;                return screenPref3_onPreferenceClick(pref);&lt;br /&gt;            }});&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    private boolean screenPref3_onPreferenceClick(Preference pref){&lt;br /&gt;        Intent intent = new Intent(this,SubActivity.class);   &lt;br /&gt;        intent.putExtra("arg1", "prefscreen3: arg1 = from code");   &lt;br /&gt;        startActivityForResult(intent, SUBACTIVITY);   &lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {&lt;br /&gt;        super.onActivityResult(requestCode, resultCode, intent);&lt;br /&gt;        Toast.makeText(this, "onActivityResult", Toast.LENGTH_SHORT).show();&lt;br /&gt;  &lt;br /&gt;        if (requestCode == SUBACTIVITY){  &lt;br /&gt;            String summary = null;&lt;br /&gt;            if (resultCode == RESULT_OK){   &lt;br /&gt;                Bundle extras = intent.getExtras(); &lt;br /&gt;                if (extras != null){   &lt;br /&gt;                    summary = "result:" + extras.getString("result");        &lt;br /&gt;                }   &lt;br /&gt;            }&lt;br /&gt;            _screenPref3.setSummary(summary);&lt;br /&gt;        }   &lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;﻿﻿ &lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;﻿﻿ &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;﻿﻿ &lt;br /&gt;﻿﻿﻿ ﻿ &lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJrhmOn5fLI/AAAAAAAABWs/A2hUftxN39Q/s1600/1.JPG" imageanchor="1" style="clear: left; cssfloat: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJrhmOn5fLI/AAAAAAAABWs/A2hUftxN39Q/s320/1.JPG" width="216" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;MainActivitｙ&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJrquWJghNI/AAAAAAAABXU/tVRaY2mtNH0/s1600/2.JPG" imageanchor="1" style="clear: left; cssfloat: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJrquWJghNI/AAAAAAAABXU/tVRaY2mtNH0/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;PreferenceScree1をクリック後&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJrq3YQENlI/AAAAAAAABXc/-_KgrbZMKpU/s1600/3.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" px="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJrq3YQENlI/AAAAAAAABXc/-_KgrbZMKpU/s320/3.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;PreferenceScree2をクリック後&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJrq_etJl9I/AAAAAAAABXk/0MW-s01t174/s1600/4.JPG" imageanchor="1" style="clear: left; cssfloat: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" px="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJrq_etJl9I/AAAAAAAABXk/0MW-s01t174/s320/4.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;PreferenceScree3をクリック後&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJrrFcSe67I/AAAAAAAABXs/bNeUAhbaCkQ/s1600/5.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" px="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJrrFcSe67I/AAAAAAAABXs/bNeUAhbaCkQ/s320/5.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;MainActivityに戻る&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;﻿﻿﻿﻿ &lt;br /&gt;﻿&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-edittextpreference.html"&gt;Android アプリ設定画面を作成する EditTextPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html"&gt;Android アプリ設定画面を作成するRingtonePreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-listpreference.html"&gt;Android アプリ設定画面を作成するListPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_16.html"&gt;Android アプリ設定画面を作成する 依存関係を設定する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html"&gt;Android アプリ設定画面を作成する PreferenceScreen（別アクティビティ）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-3069272127437913826?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/3069272127437913826/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=3069272127437913826&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3069272127437913826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3069272127437913826'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html' title='Android アプリ設定画面を作成する PreferenceScreen（別アクティビティ）'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__ZiZX_sgyy4/TJrhmOn5fLI/AAAAAAAABWs/A2hUftxN39Q/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-2319620311669584428</id><published>2010-09-21T20:47:00.001+09:00</published><updated>2010-09-23T14:35:57.204+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android アプリ設定画面を作成する PreferenceScreen</title><content type='html'>PreferenceScreenを入れ子にすると、項目を選択したときに次の設定画面が開きます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJiXJ4EtucI/AAAAAAAABV4/HLqw2g6Hzbs/s1600/1.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJiXJ4EtucI/AAAAAAAABV4/HLqw2g6Hzbs/s320/1.JPG" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJiXS5dOjAI/AAAAAAAABWA/XIugexHkcrs/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJiXS5dOjAI/AAAAAAAABWA/XIugexHkcrs/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;pref.xml&lt;br /&gt;PreferenceScreenに入れ子でPreferenceScreenを配置します。&lt;br /&gt;さらに入れ子でCheckBoxPreferenceを配置します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJiXhAPlcDI/AAAAAAAABWI/GYh2dhhhQAo/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" qx="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJiXhAPlcDI/AAAAAAAABWI/GYh2dhhhQAo/s320/WS000000.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;PreferenceScreen&lt;br /&gt;  xmlns:android="http://schemas.android.com/apk/res/android"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;PreferenceScreen &lt;br /&gt;  android:summary="PreferenceScreen要約" &lt;br /&gt;  android:title="PreferenceScreenタイトル" &lt;br /&gt;  android:key="@string/pref_screen"&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;CheckBoxPreference &lt;br /&gt;   android:key="@string/checkbox" &lt;br /&gt;   android:summary="要約" &lt;br /&gt;   android:title="タイトル"&amp;gt;&lt;br /&gt;  &amp;lt;/CheckBoxPreference&amp;gt;&lt;br /&gt;  &lt;br /&gt; &amp;lt;/PreferenceScreen&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/PreferenceScreen&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;子のCheckBoxPreferenceのチェック状態を変更したとき、子のCheckBoxPreferenceの要約を変更するのは&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference &lt;/a&gt;と同じです。&lt;br /&gt;&lt;br /&gt;子のCheckBoxPreferenceのチェック状態を変更したとき、親のPreferenceScreenの要約を変更するには、いくつか方法があります。&lt;br /&gt;子画面（PreferenceScreenをクリックして開く画面）は、新しいアクティビティではないため、本体の戻るボタンで親画面に戻ってもonResume()などは発生しません。&lt;br /&gt;そこでPreferenceScreenのOnPreferenceClickListenerをハンドルし、子画面のオブジェクトをgetDialog()メソッドで取得します。&lt;br /&gt;取得したDialogオブジェクトのOnDismissListenerをハンドルし、子画面が破棄されたタイミングで親画面の要約を変更します。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.app.Dialog;&lt;br /&gt;import android.content.DialogInterface;&lt;br /&gt;import android.content.DialogInterface.OnDismissListener;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.preference.CheckBoxPreference;&lt;br /&gt;import android.preference.Preference;&lt;br /&gt;import android.preference.PreferenceActivity;&lt;br /&gt;import android.preference.PreferenceScreen;&lt;br /&gt;import android.preference.Preference.OnPreferenceClickListener;&lt;br /&gt;import android.widget.ListView;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends PreferenceActivity {&lt;br /&gt;    &lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //xmlレイアウトの読み込み&lt;br /&gt;        this.addPreferencesFromResource(R.xml.pref);&lt;br /&gt;        //親のPreferenceScreen&lt;br /&gt;        CharSequence csScreenPrefParent = getText(R.string.prefscreen_Parent);&lt;br /&gt;        PreferenceScreen screenPref = (PreferenceScreen)findPreference(csScreenPrefParent);&lt;br /&gt;        //OnPreferenceClickListenerをハンドルする&lt;br /&gt;        screenPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public boolean onPreferenceClick(Preference preference) {&lt;br /&gt;                return screenPreference_OnPreferenceClick(preference);&lt;br /&gt;            }});&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    private boolean screenPreference_OnPreferenceClick(Preference preference){&lt;br /&gt;        PreferenceScreen screenPref = (PreferenceScreen) preference; &lt;br /&gt;        //子画面オブジェクトを取得する&lt;br /&gt;        Dialog d = screenPref.getDialog();&lt;br /&gt;        //子画面のOnDismissListenerをハンドルする &lt;br /&gt;        d.setOnDismissListener(new OnDismissListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onDismiss(DialogInterface dialog) {&lt;br /&gt;                Dialog_OnDismiss(dialog);&lt;br /&gt;            }});&lt;br /&gt;        return true;&lt;br /&gt;    } &lt;br /&gt;  &lt;br /&gt;    private void Dialog_OnDismiss(DialogInterface dialog){&lt;br /&gt;        //子のCheckPreferenceのチェック状態を取得する&lt;br /&gt;        CharSequence csCheckPrefChild = getText(R.string.prefchk_child);&lt;br /&gt;        CheckBoxPreference pref_checkChild = (CheckBoxPreference)findPreference(csCheckPrefChild);&lt;br /&gt;        String summary = null;&lt;br /&gt;        if (pref_checkChild.isChecked() == true) {&lt;br /&gt;            summary = "Checked:True";&lt;br /&gt;        } else {&lt;br /&gt;            summary = "Checked:False";&lt;br /&gt;        }&lt;br /&gt;        //親のPreferenceScreenの要約を変更する&lt;br /&gt;        CharSequence csScreenPrefParent = getText(R.string.prefscreen_Parent  );&lt;br /&gt;        PreferenceScreen screenPref = (PreferenceScreen)findPreference(csScreenPrefParent);&lt;br /&gt;        screenPref.setSummary(summary);&lt;br /&gt;        //再描画&lt;br /&gt;        ListView v = this.getListView();&lt;br /&gt;        v.invalidateViews();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJia21BaY3I/AAAAAAAABWQ/vpw2BfQvG2Q/s1600/WS000000.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" qx="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJia21BaY3I/AAAAAAAABWQ/vpw2BfQvG2Q/s320/WS000000.JPG" width="212" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJia89NUU4I/AAAAAAAABWY/AuFOMAkNV9E/s1600/WS000001.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" qx="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJia89NUU4I/AAAAAAAABWY/AuFOMAkNV9E/s320/WS000001.JPG" width="216" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJibCHmfLSI/AAAAAAAABWg/qVG8Vzq7xTM/s1600/WS000002.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" qx="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJibCHmfLSI/AAAAAAAABWg/qVG8Vzq7xTM/s320/WS000002.JPG" width="216" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-edittextpreference.html"&gt;Android アプリ設定画面を作成する EditTextPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html"&gt;Android アプリ設定画面を作成するRingtonePreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-listpreference.html"&gt;Android アプリ設定画面を作成するListPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_16.html"&gt;Android アプリ設定画面を作成する 依存関係を設定する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html"&gt;Androidアプリ設定画面を作成する PreferenceScreen（別アクティビティ）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-2319620311669584428?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/2319620311669584428/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=2319620311669584428&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2319620311669584428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2319620311669584428'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-preferencescreen.html' title='Android アプリ設定画面を作成する PreferenceScreen'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/TJiXJ4EtucI/AAAAAAAABV4/HLqw2g6Hzbs/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4067893609648714235</id><published>2010-09-16T16:36:00.001+09:00</published><updated>2010-09-23T14:35:33.970+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android アプリ設定画面を作成する 依存関係を設定する</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TJHIjExhayI/AAAAAAAABVg/u8Yf4L4R49o/s1600/1.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TJHIjExhayI/AAAAAAAABVg/u8Yf4L4R49o/s320/1.JPG" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJHIogbBsoI/AAAAAAAABVo/6K3H1pYi0Ow/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJHIogbBsoI/AAAAAAAABVo/6K3H1pYi0Ow/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;親のチェックボックスがチェックONのときだけ、子項目を有効にするには&lt;br /&gt;子項目の依存に親項目のキーを設定します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJHIzPJ-gYI/AAAAAAAABVw/a56OvuIoVTc/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="313" qx="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TJHIzPJ-gYI/AAAAAAAABVw/a56OvuIoVTc/s400/3.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;xmlでは、android:dependencyに親項目のキーを設定します。&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;PreferenceScreen&lt;br /&gt;  xmlns:android="http://schemas.android.com/apk/res/android"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;CheckBoxPreference &lt;br /&gt;  android:key="@string/checkbox" &lt;br /&gt;  android:summary="要約" &lt;br /&gt;  android:title="親チェックボックス"&amp;gt;&lt;br /&gt; &amp;lt;/CheckBoxPreference&amp;gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;EditTextPreference &lt;br /&gt;  android:title="子テキストボックス" &lt;br /&gt;  android:summary="親チェックON時 有効" &lt;br /&gt;  android:dependency="@string/checkbox" &lt;br /&gt;  android:key="@string/child_edittext" &amp;gt;&lt;br /&gt; &amp;lt;/EditTextPreference&amp;gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;CheckBoxPreference &lt;br /&gt;  android:dependency="@string/checkbox" &lt;br /&gt;  android:key="@string/child_checkbox" &lt;br /&gt;  android:summary="親チェックON時 有効" &lt;br /&gt;  android:title="子チェックボックス"&amp;gt;&lt;br /&gt; &amp;lt;/CheckBoxPreference&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/PreferenceScreen&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-edittextpreference.html"&gt;Android アプリ設定画面を作成する EditTextPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html"&gt;Android アプリ設定画面を作成するRingtonePreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-listpreference.html"&gt;Android アプリ設定画面を作成するListPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_16.html"&gt;Android アプリ設定画面を作成する 依存関係を設定する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html"&gt;Androidアプリ設定画面を作成する PreferenceScreen（別アクティビティ）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4067893609648714235?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4067893609648714235/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4067893609648714235&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4067893609648714235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4067893609648714235'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_16.html' title='Android アプリ設定画面を作成する 依存関係を設定する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TJHIjExhayI/AAAAAAAABVg/u8Yf4L4R49o/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4543108199115889859</id><published>2010-09-16T08:59:00.004+09:00</published><updated>2010-09-23T14:34:38.673+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android アプリ設定画面を作成する ListPreference</title><content type='html'>ListPrefrenceは表示されるリストの中から値を選択するGUIです。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TJFceIDt0TI/AAAAAAAABUo/cLEDtK2uucg/s1600/1.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TJFceIDt0TI/AAAAAAAABUo/cLEDtK2uucg/s320/1.JPG" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJFclGKrzKI/AAAAAAAABUw/V8oJLeS5DIM/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJFclGKrzKI/AAAAAAAABUw/V8oJLeS5DIM/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html/"&gt;Android アプリ設定画面を作成する&lt;/a&gt;で作成したxmlレイアウトにListPreferenceを追加します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJFcroyqtBI/AAAAAAAABU4/c3SraJVQXoY/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" qx="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TJFcroyqtBI/AAAAAAAABU4/c3SraJVQXoY/s400/3.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;※キーはres/value/ids.xmlでname=list,vlue=listで設定しています。&lt;br /&gt;※タイトル、要約はベタ書きしていますがres/values/strings.xmlで設定します。&lt;br /&gt;&lt;br /&gt;エントリーに設定しているのは、リストアイテムの「表示する値」を定義したxmlです。&lt;br /&gt;Entry valuesは、リストアイテムの「実際の値」を定義したxmlです。&lt;br /&gt;これらは「res/values/arrays.xml」に定義します。&lt;br /&gt;&lt;br /&gt;リストアイテムの「エントリー」と「Entry values」に定義するxmlを作成します。&lt;br /&gt;「res/values/arrays.xml」を作成します。&lt;br /&gt;追加ボタンをクリックし、ダイアログから「String Array」を選択します。&lt;br /&gt;Nameに配列の名称を設定します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TJFdCzCqgMI/AAAAAAAABVA/osGLaj3Ri0I/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TJFdCzCqgMI/AAAAAAAABVA/osGLaj3Ri0I/s400/4.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;配列に値を追加していきます。&lt;br /&gt;追加ボタンをクリックし、ダイアログから「Item」を選択します。&lt;br /&gt;Valuesにリストアイテムに「表示する値」を設定します。&lt;br /&gt;※valuesにはベタ書きしていますがres/values/strings.xmlで設定します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJFdPX-aOJI/AAAAAAAABVI/MJ56Gjgw6GA/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" qx="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJFdPX-aOJI/AAAAAAAABVI/MJ56Gjgw6GA/s400/5.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「エントリー」と「Entry values」に設定する配列は「String Array」でなければダメなようです。&lt;br /&gt;「Entry values」に「Integer Array」を設定したかったのですが、リストが表示されませんでした。&lt;br /&gt;また「Entry values」に設定する配列の各要素の値をres/values/ids.xmlで定義したかったのですが、これもダメでした。&lt;br /&gt;res/values/arrays.xml&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;string-array name="entries"&amp;gt;&lt;br /&gt; &amp;lt;item&amp;gt;@string/list_item_name1&amp;lt;/item&amp;gt;&lt;br /&gt; &amp;lt;item&amp;gt;ItemName2&amp;lt;/item&amp;gt;&lt;br /&gt; &amp;lt;item&amp;gt;ItemName3&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/string-array&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;string-array name="entryvalues"&amp;gt;&lt;br /&gt; &amp;lt;item&amp;gt;@string/list_item_value1&amp;lt;/item&amp;gt;&lt;br /&gt; &amp;lt;item&amp;gt;2&amp;lt;/item&amp;gt;&lt;br /&gt; &amp;lt;item&amp;gt;3&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/string-array&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;PreferenceActivityを継承したアクティビティでは作成したxmlレイアウトを、onCreate()メソッドではaddPreferencesFromResource()メソッドでxmlを読み込みます。&lt;br /&gt;&lt;br /&gt;ListPreferenceの選択が変更されたイベントを処理するには&lt;br /&gt;Context#findPreference()メソッドで、xmlレイアウトで設定したキーの値をもとにListPreferenceインスタンスを取得します。&lt;br /&gt;このListPreferenceインスタンスにOnPreferenceChangeListenerをハンドルします。&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.preference.ListPreference;&lt;br /&gt;import android.preference.Preference;&lt;br /&gt;import android.preference.PreferenceActivity;&lt;br /&gt;import android.preference.Preference.OnPreferenceChangeListener;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends PreferenceActivity {&lt;br /&gt; &lt;br /&gt;    // リストPreferenceの　PreferenceChangeリスナー&lt;br /&gt;    private OnPreferenceChangeListener listPreference_OnPreferenceChangeListener =&lt;br /&gt;        new OnPreferenceChangeListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public boolean onPreferenceChange(Preference preference, Object newValue) {&lt;br /&gt;                return listPreference_OnPreferenceChange(preference,newValue);&lt;br /&gt;            }};&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //xmlレイアウトの読み込み&lt;br /&gt;        this.addPreferencesFromResource(R.xml.pref);&lt;br /&gt;        // キーを基に、リスト設定のインスタンスを取得する&lt;br /&gt;        CharSequence cs = getText(R.string.list);&lt;br /&gt;        ListPreference pref = (ListPreference)findPreference(cs); &lt;br /&gt;        // リスナーを設定する&lt;br /&gt;        pref.setOnPreferenceChangeListener(listPreference_OnPreferenceChangeListener);&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    private boolean listPreference_OnPreferenceChange(Preference preference, Object newValue){  &lt;br /&gt;        ListPreference listpref =(ListPreference)preference;&lt;br /&gt;        String summary = String.format("entry=%s , value=%s", listpref.getEntry(),listpref.getValue());&lt;br /&gt;        preference.setSummary(summary);&lt;br /&gt;        return true;       &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TJFdgn17KbI/AAAAAAAABVQ/nnd-qQS0SbU/s1600/6.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TJFdgn17KbI/AAAAAAAABVQ/nnd-qQS0SbU/s320/6.JPG" width="217" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJFdnmHhHMI/AAAAAAAABVY/UQ5CfDQdizc/s1600/7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TJFdnmHhHMI/AAAAAAAABVY/UQ5CfDQdizc/s320/7.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-edittextpreference.html"&gt;Android アプリ設定画面を作成する EditTextPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html"&gt;Android アプリ設定画面を作成するRingtonePreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-listpreference.html"&gt;Android アプリ設定画面を作成するListPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_16.html"&gt;Android アプリ設定画面を作成する 依存関係を設定する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html"&gt;Androidアプリ設定画面を作成する PreferenceScreen（別アクティビティ）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4543108199115889859?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4543108199115889859/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4543108199115889859&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4543108199115889859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4543108199115889859'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-listpreference.html' title='Android アプリ設定画面を作成する ListPreference'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TJFceIDt0TI/AAAAAAAABUo/cLEDtK2uucg/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-7771114314780803872</id><published>2010-09-14T21:21:00.004+09:00</published><updated>2010-09-23T14:34:16.438+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android アプリ設定画面を作成する RingtonePreference</title><content type='html'>RingtonePreferenceは音を選択できるGUIです。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI9ncy3o9NI/AAAAAAAABUA/XQ6rCav6VR0/s1600/1.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI9ncy3o9NI/AAAAAAAABUA/XQ6rCav6VR0/s320/1.JPG" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TI9nl9HS5vI/AAAAAAAABUI/o9cxxGpf9HU/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TI9nl9HS5vI/AAAAAAAABUI/o9cxxGpf9HU/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_14.html"&gt;Android エミュレータに着信音を追加する &lt;/a&gt;でいくつか着信音、通知音、アラーム音を追加しておきます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;で作成したxmlレイアウトにRingtonePreferenceを追加します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI9nvcM_nPI/AAAAAAAABUQ/0toUnRRAwH8/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI9nvcM_nPI/AAAAAAAABUQ/0toUnRRAwH8/s320/3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;※キーはres/values/ids.xmlでname=ringtone,value=ringtoneで設定しています。&lt;br /&gt;※タイトル、要約はベタ書きしていますがres/values/strings.xmlで設定します。&lt;br /&gt;&lt;br /&gt;RingtonePreferenceで選択できる「音」を着信音だけにしたり、アラーム音だけにしたりするには、xmlレイアウトのxmlを直接変更します。&lt;br /&gt;以下ではandroid:ringtoneType="all"ですべての「音」を選択できるようにします。&lt;br /&gt;着信音だけにするには"ringtone"、通知音だけにするには"notification"、アラーム音だけにするには"alarm"を指定します。&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;RingtonePreference &lt;br /&gt;    android:key="@string/ringtone" &lt;br /&gt;    android:summary="着信音の要約" &lt;br /&gt;    android:title="着信音のタイトル"&lt;br /&gt;    android:ringtoneType="all"&amp;gt;&lt;br /&gt;&amp;lt;/RingtonePreference&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;PreferenceActivityを継承したアクティビティでは作成したxmlレイアウトを、onCreate()メソッドではaddPreferencesFromResource()メソッドでxmlを読み込みます。&lt;br /&gt;&lt;br /&gt;RingtonePreferenceの選択音が変更されたイベントを処理するには&lt;br /&gt;Context#findPreference()メソッドで、xmlレイアウトで設定したキーの値をもとにRingtonePreferenceインスタンスを取得します。&lt;br /&gt;このRingtonePreferenceインスタンスにOnPreferenceChangeListenerをハンドルします。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.media.Ringtone;&lt;br /&gt;import android.media.RingtoneManager;&lt;br /&gt;import android.net.Uri;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.preference.Preference;&lt;br /&gt;import android.preference.PreferenceActivity;&lt;br /&gt;import android.preference.RingtonePreference;&lt;br /&gt;import android.preference.Preference.OnPreferenceChangeListener;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends PreferenceActivity {&lt;br /&gt; &lt;br /&gt;    // 着信音Preferenceの　PreferenceChangeリスナー&lt;br /&gt;    private OnPreferenceChangeListener ringtonePreference_OnPreferenceChangeListener =&lt;br /&gt;        new OnPreferenceChangeListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public boolean onPreferenceChange(Preference preference, Object newValue) {&lt;br /&gt;                return ringtonePreference_OnPreferenceChange(preference,newValue);&lt;br /&gt;            }};&lt;br /&gt;&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //xmlレイアウトの読み込み&lt;br /&gt;        this.addPreferencesFromResource(R.xml.pref);&lt;br /&gt;        // キーを基に、着信音設定のインスタンスを取得する&lt;br /&gt;        CharSequence cs = getText(R.string.ringtone);&lt;br /&gt;        RingtonePreference pref = (RingtonePreference)findPreference(cs); &lt;br /&gt;        // リスナーを設定する&lt;br /&gt;        pref.setOnPreferenceChangeListener(ringtonePreference_OnPreferenceChangeListener);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private boolean ringtonePreference_OnPreferenceChange(Preference preference, Object newValue){   &lt;br /&gt;        String url = (String)newValue;&lt;br /&gt;        Uri uri;&lt;br /&gt;        Ringtone ringtone;&lt;br /&gt;        if ("".equals(url)) {&lt;br /&gt;            preference.setSummary("サイレント");&lt;br /&gt;        } else {&lt;br /&gt;            uri = Uri.parse(url);&lt;br /&gt;            ringtone = RingtoneManager.getRingtone(this, uri);&lt;br /&gt;            preference.setSummary(ringtone.getTitle(this));&lt;br /&gt;        }&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TI9n_97GcgI/AAAAAAAABUY/n4FT8dk6W0U/s1600/4.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TI9n_97GcgI/AAAAAAAABUY/n4FT8dk6W0U/s320/4.JPG" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI9oG3_cayI/AAAAAAAABUg/mGX-qstxI6o/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI9oG3_cayI/AAAAAAAABUg/mGX-qstxI6o/s320/5.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-edittextpreference.html"&gt;Android アプリ設定画面を作成する EditTextPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html"&gt;Android アプリ設定画面を作成するRingtonePreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-listpreference.html"&gt;Android アプリ設定画面を作成するListPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_16.html"&gt;Android アプリ設定画面を作成する 依存関係を設定する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html"&gt;Androidアプリ設定画面を作成する PreferenceScreen（別アクティビティ）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-7771114314780803872?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/7771114314780803872/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=7771114314780803872&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/7771114314780803872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/7771114314780803872'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html' title='Android アプリ設定画面を作成する RingtonePreference'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TI9ncy3o9NI/AAAAAAAABUA/XQ6rCav6VR0/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-214528028801167296</id><published>2010-09-14T17:44:00.001+09:00</published><updated>2010-09-14T17:47:16.529+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android エミュレータに着信音を追加する</title><content type='html'>Eclipseを起動しエミュレータを起動します。&lt;br /&gt;エミュレータはAVDManagerでSDカードのサイズが設定されているものとします。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI800v950FI/AAAAAAAABTA/aYr6qpxdnAM/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI800v950FI/AAAAAAAABTA/aYr6qpxdnAM/s320/1.JPG" width="226" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;mp3ファイルを「/sdcard/media/audio/ringtones」フォルダに配置します。&lt;br /&gt;※audioフォルダの中の各フォルダは、それぞれ着信音、アラーム音、通知音などに対応しています。&lt;br /&gt;今回は着信音を追加したいのでringtonesフォルダにmp3ファイルを配置しましたが、通知音を追加したければ「/sdcard/media/audio/notifications」にmp3ファイルを追加します。&lt;br /&gt;alarms アラーム音&lt;br /&gt;music 音楽&lt;br /&gt;notifications 通知音&lt;br /&gt;ringtones 着信音&lt;br /&gt;&lt;br /&gt;「/sdcard/media/audio/ringtones」フォルダがなければ、コマンドプロンプトから以下のコマンドでフォルダを作成します。&lt;br /&gt;&lt;div class="box"&gt;&amp;gt;adb shell&lt;br /&gt;# mkdir /sdcard/medi/audio/ringtones&lt;br /&gt;# exit&lt;/div&gt;adb shellでエミュレータのシェルに入ります。&lt;br /&gt;mkdirでフォルダを作成します。&lt;br /&gt;exitでシェルから出ます。&lt;br /&gt;※rmdirでフォルダ削除です。&lt;br /&gt;※pwdでどのディレクトリにいるのかわかります。&lt;br /&gt;&lt;br /&gt;作成した「/sdcard/media/audio/ringtones」フォルダにmp3ファイルをコピーします。&lt;br /&gt;コマンドプロンプトから以下のコマンドを入力します。&lt;br /&gt;&lt;div class="box"&gt;&amp;gt;adb push C:¥Sample.mp3 /sdcard/media/audio/ringtones &lt;/div&gt;adb push &amp;lt;PCにあるファイル&amp;gt; &amp;lt;デバイスのフォルダ&amp;gt; &lt;br /&gt;※ファイルを取り出すには&lt;br /&gt;adb pull &amp;lt;デバイスファイル名&amp;gt; &amp;lt;PCのファイル名&amp;gt;&lt;br /&gt;&lt;br /&gt;EclipseのDDMSからファイルをコピーすることもできます。&lt;br /&gt;Eclipseのメニューから「ウィンドウ」→「パースペクティブを開く」→「DDMS」でDDMSを起動し&lt;br /&gt;「/sdcard/media/audio/ringtones」を選択し、右上の「Push a file onto the device」をクリックします。&lt;br /&gt;※DDMSでフォルダを作成することはできません。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI80_9SVitI/AAAAAAAABTI/fVkLC30wN20/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" qx="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI80_9SVitI/AAAAAAAABTI/fVkLC30wN20/s320/2.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;次にコピーしたファイルを認識させます。&lt;br /&gt;エミュレータの「設定」より「Dev Tool」を起動します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI81L32FfoI/AAAAAAAABTQ/j5QMOJmoE60/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" qx="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI81L32FfoI/AAAAAAAABTQ/j5QMOJmoE60/s320/3.JPG" width="212" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「Media Scanner」を選択します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI81T88kMJI/AAAAAAAABTY/Mn9mNbaRpAg/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI81T88kMJI/AAAAAAAABTY/Mn9mNbaRpAg/s320/4.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;SDカードのマウントが開始されます。&lt;br /&gt;「Media Scanner finished scanning /sdcard」と表示されればマウント終了です。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI81Z7x3XnI/AAAAAAAABTg/_2_Afq6Lr3g/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI81Z7x3XnI/AAAAAAAABTg/_2_Afq6Lr3g/s320/5.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;着信音が追加されたか確認します。&lt;br /&gt;エミュレータの「設定」より「サウンド＆画面設定」を選択します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI81hMsLuGI/AAAAAAAABTo/-twXscsxL9s/s1600/6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI81hMsLuGI/AAAAAAAABTo/-twXscsxL9s/s320/6.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「着信音」を選択します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI81oZIiWOI/AAAAAAAABTw/MHppJXNN87U/s1600/7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI81oZIiWOI/AAAAAAAABTw/MHppJXNN87U/s320/7.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;追加されたファイルが表示されます。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI81xqh-OOI/AAAAAAAABT4/x0bwq6xooFc/s1600/8.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI81xqh-OOI/AAAAAAAABT4/x0bwq6xooFc/s320/8.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-214528028801167296?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/214528028801167296/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=214528028801167296&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/214528028801167296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/214528028801167296'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_14.html' title='Android エミュレータに着信音を追加する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TI800v950FI/AAAAAAAABTA/aYr6qpxdnAM/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8271392970619682607</id><published>2010-09-14T07:24:00.006+09:00</published><updated>2010-09-23T14:33:51.881+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android アプリ設定画面を作成する EditTextPreference</title><content type='html'>EditTextPreferenceは値を設定できるGUIです。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI5LbCrtKBI/AAAAAAAABSo/FKQr0TtPdXA/s1600/WS000002.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI5LbCrtKBI/AAAAAAAABSo/FKQr0TtPdXA/s320/WS000002.JPG" width="214" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI5LkkmjuWI/AAAAAAAABSw/W3GNuZFiSHI/s1600/WS000003.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI5LkkmjuWI/AAAAAAAABSw/W3GNuZFiSHI/s320/WS000003.JPG" width="216" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;で作成したxmlレイアウトにEditTextPreferenceを追加します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TI6kcCxiitI/AAAAAAAABS4/ugC8e8AA22Q/s1600/WS000001.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="263" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TI6kcCxiitI/AAAAAAAABS4/ugC8e8AA22Q/s400/WS000001.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;※キーはres/values/ids.xmlでname=textbox,value=textboxで設定しています。&lt;br /&gt;※タイトル、要約はベタ書きしていますがres/values/strings.xmlで設定します。&lt;br /&gt;&lt;br /&gt;EditTextPreferenceを数値のみ入力可能にしたり、入力文字数を制限するには、xmlレイアウトのxmlを直接変更します。&lt;br /&gt;以下ではandroid:inputType="number"で数値のみの入力、android:maxLength="5"で5バイトの入力制限をかけています。&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;EditTextPreference &lt;br /&gt; android:key="@string/textbox" &lt;br /&gt; android:summary="テキストボックス要約" &lt;br /&gt; android:title="テキストボックスタイトル"&lt;br /&gt; android:inputType="number" &lt;br /&gt; android:maxLength="5"&amp;gt;&lt;br /&gt;&amp;lt;/EditTextPreference&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;PreferenceActivityを継承したアクティビティのonCreate()メソッドでは、addPreferencesFromResource()メソッドでxmlを読み込みます。&lt;br /&gt;&lt;br /&gt;EditTextPreferenceで入力チェックを行うには&lt;br /&gt;Context#findPreference()メソッドで、xmlレイアウトで設定したキーの値をもとにEditTextPreferenceインスタンスを取得します。&lt;br /&gt;このEditTextPreferenceインスタンスにOnPreferenceChangeListenerをハンドルします。&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.preference.EditTextPreference;&lt;br /&gt;import android.preference.Preference;&lt;br /&gt;import android.preference.PreferenceActivity;&lt;br /&gt;import android.preference.Preference.OnPreferenceChangeListener;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends PreferenceActivity {&lt;br /&gt; &lt;br /&gt;    // テキストボックスPreferenceの PreferenceChangeリスナー&lt;br /&gt;    private OnPreferenceChangeListener editTextPreference_OnPreferenceChangeListener =&lt;br /&gt;        new OnPreferenceChangeListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public boolean onPreferenceChange(Preference preference, Object newValue) {&lt;br /&gt;                return editTextPreference_OnPreferenceChange(preference,newValue);&lt;br /&gt;            }};&lt;br /&gt;&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //xmlレイアウトの読み込み&lt;br /&gt;        this.addPreferencesFromResource(R.xml.pref);&lt;br /&gt;        // キーを基に、テキストボックス設定のインスタンスを取得する&lt;br /&gt;        CharSequence cs = getText(R.string.textbox);&lt;br /&gt;        EditTextPreference etp = (EditTextPreference)findPreference(cs); &lt;br /&gt;        // リスナーを設定する&lt;br /&gt;        etp.setOnPreferenceChangeListener(editTextPreference_OnPreferenceChangeListener);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private boolean editTextPreference_OnPreferenceChange(Preference preference, Object newValue){&lt;br /&gt;        String input = newValue.toString(); &lt;br /&gt;        if (input != null &amp;amp;&amp;amp; Integer.parseInt(input) &amp;gt; 100){&lt;br /&gt;            //nullでなく100以上であれば要約を変更する&lt;br /&gt;            preference.setSummary(input);&lt;br /&gt;            return true;&lt;br /&gt;        } else {&lt;br /&gt;            //nullまたは100以下はエラー&lt;br /&gt;            return false;&lt;br /&gt;        }  &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-edittextpreference.html"&gt;Android アプリ設定画面を作成する EditTextPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html"&gt;Android アプリ設定画面を作成するRingtonePreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-listpreference.html"&gt;Android アプリ設定画面を作成するListPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_16.html"&gt;Android アプリ設定画面を作成する 依存関係を設定する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html"&gt;Androidアプリ設定画面を作成する PreferenceScreen（別アクティビティ）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8271392970619682607?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8271392970619682607/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8271392970619682607&amp;isPopup=true' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8271392970619682607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8271392970619682607'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-edittextpreference.html' title='Android アプリ設定画面を作成する EditTextPreference'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__ZiZX_sgyy4/TI5LbCrtKBI/AAAAAAAABSo/FKQr0TtPdXA/s72-c/WS000002.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-3495846923507691332</id><published>2010-09-13T23:28:00.007+09:00</published><updated>2010-09-23T14:33:30.126+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android アプリ設定画面を作成する CheckBoxPreference</title><content type='html'>CheckBoxPreferenceはtrue,falseを設定できるGUIです。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI4yG9SKgII/AAAAAAAABSI/92yimxhLVho/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI4yG9SKgII/AAAAAAAABSI/92yimxhLVho/s400/1.JPG" width="270" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;で作成したxmlレイアウトにCheckBoxPreferenceを追加します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI4zEdAkEHI/AAAAAAAABSg/W376YU2wuXc/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="263" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TI4zEdAkEHI/AAAAAAAABSg/W376YU2wuXc/s400/WS000000.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;※キーはres/values/ids.xmlでname=checkbox,value=checkboxで設定しています。&lt;br /&gt;※タイトル、要約はベタ書きしていますがres/values/strings.xmlで設定します。&lt;br /&gt;&lt;br /&gt;PreferenceActivityを継承したアクティビティのonCreate()メソッドでは、addPreferencesFromResource()メソッドでxmlを読み込みます。&lt;br /&gt;&lt;br /&gt;CheckBoxPreferenceのチェックの状態が変更されたイベントを処理するには&lt;br /&gt;Context#findPreference()メソッドで、xmlレイアウトで設定したキーの値をもとにCheckBoxPreferenceインスタンスを取得します。&lt;br /&gt;このCheckBoxPreferenceインスタンスにOnPreferenceChangeListenerをハンドルします。&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.preference.CheckBoxPreference;&lt;br /&gt;import android.preference.Preference;&lt;br /&gt;import android.preference.PreferenceActivity;&lt;br /&gt;import android.preference.Preference.OnPreferenceChangeListener;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends PreferenceActivity {&lt;br /&gt; &lt;br /&gt;    // チェックボックスPreferenceの　PreferenceChangeリスナー&lt;br /&gt;    private OnPreferenceChangeListener checkBoxPreference_OnPreferenceChangeListener =&lt;br /&gt;        new OnPreferenceChangeListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public boolean onPreferenceChange(Preference preference, Object newValue) {&lt;br /&gt;                return checkBoxPreference_OnPreferenceChange(preference,newValue);&lt;br /&gt;            }};&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //xmlレイアウトの読み込み&lt;br /&gt;        this.addPreferencesFromResource(R.xml.pref);&lt;br /&gt;        // キーを基に、チェックボックス設定のインスタンスを取得する&lt;br /&gt;        CharSequence cs = getText(R.string.checkbox);&lt;br /&gt;        CheckBoxPreference cbp = (CheckBoxPreference)findPreference(cs);&lt;br /&gt;        // リスナーを設定する&lt;br /&gt;        cbp.setOnPreferenceChangeListener(checkBoxPreference_OnPreferenceChangeListener);&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    private boolean checkBoxPreference_OnPreferenceChange(Preference preference, Object newValue){&lt;br /&gt;        String summary;&lt;br /&gt;        if (((Boolean)newValue).booleanValue()) {&lt;br /&gt;            summary = "Checked:true";&lt;br /&gt;        } else {&lt;br /&gt;            summary = "Checked:false";&lt;br /&gt;        }&lt;br /&gt;        // 要約を変更する&lt;br /&gt;        ((CheckBoxPreference)preference).setSummary(summary);&lt;br /&gt;        // 変更を適用するために true を返す&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI4ySy10h9I/AAAAAAAABSQ/Ko5QkuXafQM/s1600/2.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI4ySy10h9I/AAAAAAAABSQ/Ko5QkuXafQM/s400/2.JPG" width="271" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI4yaz7U3QI/AAAAAAAABSY/k0gSLNiAsSI/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI4yaz7U3QI/AAAAAAAABSY/k0gSLNiAsSI/s400/3.JPG" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-edittextpreference.html"&gt;Android アプリ設定画面を作成する EditTextPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html"&gt;Android アプリ設定画面を作成するRingtonePreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-listpreference.html"&gt;Android アプリ設定画面を作成するListPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_16.html"&gt;Android アプリ設定画面を作成する 依存関係を設定する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html"&gt;Androidアプリ設定画面を作成する PreferenceScreen（別アクティビティ）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-3495846923507691332?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/3495846923507691332/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=3495846923507691332&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3495846923507691332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3495846923507691332'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html' title='Android アプリ設定画面を作成する CheckBoxPreference'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__ZiZX_sgyy4/TI4yG9SKgII/AAAAAAAABSI/92yimxhLVho/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-6914281722397411545</id><published>2010-09-13T23:23:00.009+09:00</published><updated>2010-09-23T14:33:06.906+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android アプリ設定画面を作成する</title><content type='html'>Androidには設定画面専用のPreferenceActivityクラスが用意されています。&lt;br /&gt;PreferenceActivityクラスを利用すると、設定値は自動的にプリファレンスファイルに読み書きされます。&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;アプリ設定画面のxmlレイアウトを作成する&lt;/h1&gt;res/xmlフォルダに「Android xml File」を新規追加します。&lt;br /&gt;（xmlフォルダがなければ作成します）&lt;br /&gt;「New Android XML File」ダイアログでは「Preference」ラジオを選択します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI4WBFW7DUI/AAAAAAAABRg/F9G_QHIBI9k/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI4WBFW7DUI/AAAAAAAABRg/F9G_QHIBI9k/s400/1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;設定項目に使用可能なコンポーネントは以下のようなものがあります。&lt;br /&gt;CheckBoxPreference チェックボックス設定&lt;br /&gt;EditTextPreference テキスト設定&lt;br /&gt;ListPreference リスト設定&lt;br /&gt;RingtonePreference リングトーンのための設定&lt;br /&gt;PreferenceCategory 設定項目のカテゴリ&lt;br /&gt;PreferenceScreen 設定項目が設置可能な設定（入れ子用）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まずPreferenceCategoryを追加します。&lt;br /&gt;以下の設定を行います。&lt;br /&gt;タイトル：タイトル（カテゴリー１タイトル）&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI4WLvlK7vI/AAAAAAAABRo/esLLPKm6c1A/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI4WLvlK7vI/AAAAAAAABRo/esLLPKm6c1A/s400/2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;追加したカテゴリーにCheckBoxPreferenceを追加します。&lt;br /&gt;以下の設定を行います。&lt;br /&gt;キー：プリファレンスのキー(checkbox)&lt;br /&gt;タイトル：タイトル(チェックボックスタイトル）&lt;br /&gt;要約：タイトルの下の説明（チェックボックス要約）&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TI4WS0PPeBI/AAAAAAAABRw/ZkbYg4gHECs/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TI4WS0PPeBI/AAAAAAAABRw/ZkbYg4gHECs/s400/3.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;※実際にはタイトルや要約に使用する文字列はres/values/string.xmlに定義するようにします。&lt;br /&gt;キーはres/values/ids.xmlにnameとvalueを同じ値で定義するようにします。&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;アプリ設定画面のActivityを作成する&lt;/h1&gt;プロジェクトにandroid.preference.PreferenceActivityを継承したアクティビティを作成します。&lt;br /&gt;アクティビティのonCreate()メソッドではaddPreferencesFromResource()メソッドでxmlを読み込みます。&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.preference.PreferenceActivity;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends PreferenceActivity {&lt;br /&gt; @Override&lt;br /&gt; protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;  super.onCreate(savedInstanceState);&lt;br /&gt;  //xmlレイアウトの読み込み&lt;br /&gt;  this.addPreferencesFromResource(R.xml.pref);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;実行画面は以下のようになります。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI4WoXvza0I/AAAAAAAABR4/_dws_QFlkPo/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TI4WoXvza0I/AAAAAAAABR4/_dws_QFlkPo/s320/4.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;実行画面で各設定値を変更したタイミングでデフォルトプリファレンスファイルが作成されます。&lt;br /&gt;ファイルは「/data/data/&amp;lt;パッケージ名&amp;gt;/shared_prefs/&amp;lt;パッケージ名&amp;gt;_preferences.xml」に作成されます。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI4WuqahzfI/AAAAAAAABSA/i5_JUBVdl0A/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TI4WuqahzfI/AAAAAAAABSA/i5_JUBVdl0A/s320/5.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&amp;gt;&lt;br /&gt;&amp;lt;map&amp;gt;&lt;br /&gt; &amp;lt;boolean name="checkbox" value="true" /&amp;gt;&lt;br /&gt;&amp;lt;/map&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;プログラムで設定値を使用するには、&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;を参照してください。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-edittextpreference.html"&gt;Android アプリ設定画面を作成する EditTextPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html"&gt;Android アプリ設定画面を作成するRingtonePreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-listpreference.html"&gt;Android アプリ設定画面を作成するListPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_16.html"&gt;Android アプリ設定画面を作成する 依存関係を設定する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html"&gt;Androidアプリ設定画面を作成する PreferenceScreen（別アクティビティ）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;【参考】&lt;br /&gt;&lt;a href="http://www.atmarkit.co.jp/fjava/rensai4/android19/android19_1.html"&gt;@IT XMLレイアウトでAndroidアプリに“設定画面”を追加&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ascii.jp/elem/000/000/546/546427/"&gt;ASCII Androidアプリの設定画面を作成する&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-6914281722397411545?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/6914281722397411545/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=6914281722397411545&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6914281722397411545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6914281722397411545'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_13.html' title='Android アプリ設定画面を作成する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__ZiZX_sgyy4/TI4WBFW7DUI/AAAAAAAABRg/F9G_QHIBI9k/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-5957854192145975872</id><published>2010-09-12T17:07:00.009+09:00</published><updated>2010-09-23T14:32:42.092+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android プリファレンスの編集</title><content type='html'>Androidではプリファレンスと呼ばれるデータ永続化の方法が用意されています。&lt;br /&gt;プリファレンスは、キーと値のセットでデータをxmlに保存します。&lt;br /&gt;xmlファイルは「/data/data/&amp;lt;パッケージ名&amp;gt;/shared_prefs/&amp;lt;ファイル名&amp;gt;.xml」に作成されます。&lt;br /&gt;&lt;br /&gt;プリファレンスを利用するには、SharedPreferencesオブジェクトを取得して操作します。&lt;br /&gt;SharedPreferencesオブジェクトはContextクラスのgetSharedPreferences()メソッドで取得します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;SharedPreferences getSharedPreferences(String name, int mode)&lt;br /&gt;&lt;/pre&gt;引数&lt;br /&gt;name：ファイル名&lt;br /&gt;mode：以下のいずれかの定数を指定します。&lt;br /&gt;MODE_PRIVATE 他のアプリからはアクセス不可&lt;br /&gt;MODE_WORLD_READABLE 他のアプリからの読み込み可能&lt;br /&gt;MODE_WORLD_WRITEABLE 他のアプリからの書き込み可能&lt;br /&gt;&lt;br /&gt;プリファレンスへのデータ書き込みには、SharedPreferencesオブジェクトのedit()メソッドでSharedPreferences.Editorオブジェクトを取得します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;SharedPreferences.Editor edit()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;SharedPreferences.EditorオブジェクトのputXxxx()メソッドなどで値を追加します。[&lt;br /&gt;第二引数には設定項目が見つからなかった場合に利用する値を設定します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;SharedPreferences.Editor putString(String key, String value)&lt;br /&gt;SharedPreferences.Editor putInt(String key, int value)&lt;br /&gt;SharedPreferences.Editor putLong(String key, long value)&lt;br /&gt;SharedPreferences.Editor putFloat(String key, float value)&lt;br /&gt;SharedPreferences.Editor pubBoolean(String key, boolean value)&lt;br /&gt;etc・・・&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;プリファレンスの値の削除は、SharedPreferences.Editorオブジェクトのremove()メソッドを使用します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;SharedPreferences.Editor remove(String key)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;プリファレンスのすべてのキーと値を削除するには、SharedPreferences.Editorオブジェクトのclear()メソッドを使用します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;SharedPreferences.Editor clear()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;最後にSharedPreferences.Editorオブジェクトのcommit()メソッドでプリファレンスデータを保存します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;boolean commit()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;プリファレンスへのデータ読み込みには、SharedPreferencesオブジェクトのgetXxxx()メソッド等で値を取得します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;String getString(String key, String defValue)&lt;br /&gt;int getInt(String key, int defValue)&lt;br /&gt;long getLong(String key, long defValue)&lt;br /&gt;float getFloat(String key, float defValue)&lt;br /&gt;boolean getBoolean(String key, boolean defValue)&lt;br /&gt;etc・・・&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;アプリケーションにはデフォルトのプリファレンスが１つ用意されており、プリファレンス名を指定せずに取得出来ます。&lt;br /&gt;デフォルトのプリファレンスは常にMODE_PRIVATEです。&lt;br /&gt;アプリケーションで１つしかプリファレンスファイルを利用せず、他のアプリケーションと共有しない場合には便利に利用できます。&lt;br /&gt;デフォルトのプリファレンスを取得するには&lt;br /&gt;&lt;pre class="java" name="code"&gt;SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;テキストボックスに入力した値をプリファレンスファイルに入出力するサンプルです。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIyJ3vmILPI/AAAAAAAABRQ/GPsExmsh_jw/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIyJ3vmILPI/AAAAAAAABRQ/GPsExmsh_jw/s400/WS000000.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ファイルは「/data/data/&amp;lt;パッケージ名&amp;gt;/shared_prefs/&amp;lt;ファイル名&amp;gt;.xml」に作成されます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIyKSizFueI/AAAAAAAABRY/DSyURKfg_Oo/s1600/WS000001.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIyKSizFueI/AAAAAAAABRY/DSyURKfg_Oo/s400/WS000001.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Writeボタンをクリックした後のプリファレンスファイル&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&amp;gt;&lt;br /&gt;&amp;lt;map&amp;gt;&lt;br /&gt;&amp;lt;string name="TEXT"&amp;gt;123456789&amp;lt;/string&amp;gt;&lt;br /&gt;&amp;lt;/map&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;AllClearボタンをクリックした後のプリファレンスファイル&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&amp;gt;&lt;br /&gt;&amp;lt;map /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;MainActivity.java&lt;br /&gt;※キーはわかりやすいようにベタ書きしていますが、実際はres/values/ids.xmlにnameとvalueを同じ値で定義するようにします。&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.SharedPreferences;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;&lt;br /&gt;    private static final String PREFERRENCES_FILE_NAME = "PrefrencesFile";&lt;br /&gt;  &lt;br /&gt;    /* WriteボタンClickリスナー */&lt;br /&gt;    private OnClickListener btnWrite_OnClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {btnWrite_OnClick(v);}};&lt;br /&gt;    /* ReadボタンClickリスナー */&lt;br /&gt;    private OnClickListener btnRead_OnClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {btnRead_OnClick(v);}};&lt;br /&gt;    /* AllClearボタンClickリスナー */&lt;br /&gt;    private OnClickListener btnAllClear_OnClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {btnAllClear_OnClick(v);}};&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * onCreate&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //Writeボタン&lt;br /&gt;        Button btnWrite = (Button)this.findViewById(R.id.btnWrite);&lt;br /&gt;        btnWrite.setOnClickListener(btnWrite_OnClickListener);&lt;br /&gt;        //Readボタン&lt;br /&gt;        Button btnRead = (Button)this.findViewById(R.id.btnRead);&lt;br /&gt;        btnRead.setOnClickListener(btnRead_OnClickListener);&lt;br /&gt;        //AllClearボタン&lt;br /&gt;        Button btnAllClear = (Button)this.findViewById(R.id.btnAllClear);&lt;br /&gt;        btnAllClear.setOnClickListener(btnAllClear_OnClickListener);&lt;br /&gt;    } &lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * Writeボタン処理&lt;br /&gt;     */&lt;br /&gt;    private void btnWrite_OnClick(View v){&lt;br /&gt;        //プリファレンスのインスタンスを取得&lt;br /&gt;        SharedPreferences pre = this.getSharedPreferences(PREFERRENCES_FILE_NAME, MODE_PRIVATE);&lt;br /&gt;        //デフォルトプリファレンスのインスタンスを取得する&lt;br /&gt;        //SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(this);&lt;br /&gt;        //プリファレンスのエディタを取得&lt;br /&gt;        SharedPreferences.Editor editor = pre.edit();&lt;br /&gt;        //テキストボックスの値を書き込み&lt;br /&gt;        EditText text = (EditText)this.findViewById(R.id.text);&lt;br /&gt;        editor.putString("TEXT",text.getText().toString());&lt;br /&gt;        //保存&lt;br /&gt;        editor.commit();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * ReadボタンClick処理&lt;br /&gt;     */&lt;br /&gt;    private void btnRead_OnClick(View v){&lt;br /&gt;        //プリファレンスのインスタンスを取得&lt;br /&gt;        SharedPreferences pre = this.getSharedPreferences(PREFERRENCES_FILE_NAME, MODE_PRIVATE);&lt;br /&gt;        //デフォルトプリファレンスのインスタンスを取得する&lt;br /&gt;        //SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(this);&lt;br /&gt;        //読み込み&lt;br /&gt;        String str = pre.getString("TEXT", "NONE");&lt;br /&gt;        //テキストボックスに表示&lt;br /&gt;        EditText text = (EditText)this.findViewById(R.id.text);&lt;br /&gt;        text.setText(str);&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * AllClearボタン処理&lt;br /&gt;     */&lt;br /&gt;    private void btnAllClear_OnClick(View v){&lt;br /&gt;        //プリファレンスのインスタンスを取得&lt;br /&gt;        SharedPreferences pre = this.getSharedPreferences(PREFERRENCES_FILE_NAME, MODE_PRIVATE);&lt;br /&gt;        //デフォルトプリファレンスのインスタンスを取得する&lt;br /&gt;        //SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(this);&lt;br /&gt;        //プリファレンスのエディタを取得&lt;br /&gt;        SharedPreferences.Editor editor = pre.edit();&lt;br /&gt;        //すべての設定を削除&lt;br /&gt;        editor.clear();&lt;br /&gt;        //保存&lt;br /&gt;        editor.commit();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;main.xml(MainActivityのレイアウト）&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;EditText android:text="@+id/EditText01" android:id="@+id/text" &lt;br /&gt; android:layout_width="wrap_content" android:layout_height="wrap_content"&amp;gt;&amp;lt;/EditText&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:text="Write" android:id="@+id/btnWrite"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;Button android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:text="Read" android:id="@+id/btnRead"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;Button android:text="AllClear" android:id="@+id/btnAllClear" &lt;br /&gt; android:layout_width="wrap_content" android:layout_height="wrap_content"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_12.html"&gt;Android プリファレンスの編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_13.html"&gt;Android アプリ設定画面を作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-checkboxpreference.html"&gt;Android アプリ設定画面を作成する CheckBoxPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-edittextpreference.html"&gt;Android アプリ設定画面を作成する EditTextPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-ringtonepreference.html"&gt;Android アプリ設定画面を作成するRingtonePreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-listpreference.html"&gt;Android アプリ設定画面を作成するListPreference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android_16.html"&gt;Android アプリ設定画面を作成する 依存関係を設定する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen.html"&gt;Android アプリ設定画面を作成する PreferenceScreen &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-preferencescreen_23.html"&gt;Androidアプリ設定画面を作成する PreferenceScreen（別アクティビティ）&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-5957854192145975872?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/5957854192145975872/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=5957854192145975872&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5957854192145975872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5957854192145975872'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_12.html' title='Android プリファレンスの編集'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TIyJ3vmILPI/AAAAAAAABRQ/GPsExmsh_jw/s72-c/WS000000.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-3062503394306715098</id><published>2010-09-12T01:10:00.004+09:00</published><updated>2010-09-28T18:30:16.313+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android ファイル読み込み（res/rawフォルダ、assetsフォルダ)</title><content type='html'>res/rawフォルダにファイルを配置すると、インストール時にアプリケーションに含めて配置することができます。&lt;br /&gt;assetsフォルダも同様です。&lt;br /&gt;このフォルダのファイルは読み込みは出来ますが、書き込みはできません。&lt;br /&gt;&lt;br /&gt;どのように使い分ければ良いのか調べたのですが・・・よくわかりませんでした。&lt;br /&gt;たぶんですが&lt;br /&gt;アプリで使用するようなアイコンなどはres/rawフォルダ&lt;br /&gt;データベースのテーブルを作成するsqlファイルのようなものはassetsフォルダ&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;res/rawフォルダのファイルを読み込むには&lt;br /&gt;まずEclipseのパッケージエクスプローラより、res/rawフォルダにテキストファイルを作成します。&lt;br /&gt;（rawフォルダがない場合は作成します。）&lt;br /&gt;ファイル名に許可されている文字はa～zの小文字、アンダーバー(_）、ピリオド（.)のみです。&lt;br /&gt;rawフォルダに配置したファイルは以下のようにInputStreamインスタンスを取得できます。&lt;br /&gt;&lt;pre name="code" class="java"&gt;Resources res = this.getResources();&lt;br /&gt;InputStream is = res.openRawResource(R.raw.ファイル名);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;assetsフォルダのファイルを読み込むには&lt;br /&gt;まずEclipseのパッケージエクスプローラより、assetsフォルダにテキストファイルを作成します。&lt;br /&gt;ファイル名にはres/rawフォルダのような制限はありません。&lt;br /&gt;assetsフォルダに配置したファイルは以下のようにInputStreamインスタンスを取得できます。&lt;br /&gt;&lt;pre name="code" class="java"&gt;AssetManager as = getResources().getAssets(); &lt;br /&gt;InputStream is = as.open("ファイル名.txt");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;サンプルコード&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre name="code" class="java"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.res.AssetManager;&lt;br /&gt;import android.content.res.Resources;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;&lt;br /&gt;    /*&lt;br /&gt;     * onCreate&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //ResRawボタン&lt;br /&gt;        Button btnResRaw = (Button)this.findViewById(R.id.btnResRaw);&lt;br /&gt;        btnResRaw.setOnClickListener(new OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(View v) {buttonResRaw_OnClick(v);}});&lt;br /&gt;        //Readボタン&lt;br /&gt;        Button btnAssets = (Button)this.findViewById(R.id.btnAssets);&lt;br /&gt;        btnAssets.setOnClickListener(new OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(View v) {buttonAssets_OnClick(v);}}); &lt;br /&gt;    } &lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * ResRawボタン処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonResRaw_OnClick(View v){&lt;br /&gt;        Resources res = this.getResources();&lt;br /&gt;  &lt;br /&gt;        InputStream is = null;&lt;br /&gt;        BufferedReader br = null;&lt;br /&gt;        StringBuilder sb = new StringBuilder(); &lt;br /&gt;        try{&lt;br /&gt;            try {       &lt;br /&gt;                is = res.openRawResource(R.raw.textraw);&lt;br /&gt;                br = new BufferedReader(new InputStreamReader(is));&lt;br /&gt;                String str;   &lt;br /&gt;                while((str = br.readLine()) != null){   &lt;br /&gt;                    sb.append(str +"\n");  &lt;br /&gt;                } &lt;br /&gt;            } finally {&lt;br /&gt;                if (br !=null) br.close();&lt;br /&gt;            }&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            Toast.makeText(this, "読み込み失敗", Toast.LENGTH_SHORT).show();&lt;br /&gt;        }  &lt;br /&gt;        TextView label = (TextView)this.findViewById(R.id.label);&lt;br /&gt;        label.setText(sb.toString());&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * AssetsボタンClick処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonAssets_OnClick(View v){&lt;br /&gt;        AssetManager as = getResources().getAssets(); &lt;br /&gt;  &lt;br /&gt;        InputStream is = null;&lt;br /&gt;        BufferedReader br = null;&lt;br /&gt;  &lt;br /&gt;        StringBuilder sb = new StringBuilder(); &lt;br /&gt;        try{&lt;br /&gt;            try {&lt;br /&gt;                is = as.open("TextAssets.txt");&lt;br /&gt;                br = new BufferedReader(new InputStreamReader(is)); &lt;br /&gt;     &lt;br /&gt;                String str;   &lt;br /&gt;                while((str = br.readLine()) != null){   &lt;br /&gt;                    sb.append(str +"\n");  &lt;br /&gt;                }    &lt;br /&gt;            } finally {&lt;br /&gt;                if (br != null) br.close();&lt;br /&gt;            }&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            Toast.makeText(this, "読み込み失敗", Toast.LENGTH_SHORT).show();&lt;br /&gt;        }&lt;br /&gt;        TextView label = (TextView)this.findViewById(R.id.label);&lt;br /&gt;        label.setText(sb.toString());&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;main.xml(MainActivityのレイアウト）&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:id="@+id/label"&amp;gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:text="Res/Raw" android:id="@+id/btnResRaw"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;Button android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:text="Assets" android:id="@+id/btnAssets"&amp;gt;&amp;lt;/Button&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-3062503394306715098?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/3062503394306715098/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=3062503394306715098&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3062503394306715098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3062503394306715098'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-resrawassets.html' title='Android ファイル読み込み（res/rawフォルダ、assetsフォルダ)'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-7712856179715555828</id><published>2010-09-12T00:13:00.000+09:00</published><updated>2010-09-12T00:13:51.801+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android ファイルの入出力（filesフォルダ)</title><content type='html'>Androidではデータベースと同じくファイルも、アプリケーション毎に管理され、他のアプリケーションからは直接操作できません。&lt;br /&gt;ファイルは「data/data/&amp;lt;パッケージ名&amp;gt;/files/」に作成され、このフォルダのファイルを読み込めます。&lt;br /&gt;&lt;br /&gt;書き込みには出力用ストリーム(OutputStream)のインスタンスを、openFileOutput()メソッドで取得します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;OutputStream openFileOutput(String fileName, int mode)&lt;br /&gt;&lt;/pre&gt;引数&lt;br /&gt;fileName:ファイル名を指定します。ファイルパスは含めません。&lt;br /&gt;mode:操作モードを指定します。&lt;br /&gt;MODE_APPEND 既存ファイルの最後に追加書き込み&lt;br /&gt;MODE_PRIVATE 他のアプリからはアクセス不可&lt;br /&gt;MODE_WORLD_READABLE 他のアプリからの読み込み可能&lt;br /&gt;MODE_WORLD_WRITABLE 他のアプリからの書き込み可能&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;読み込みには入力用ストリーム（InputStream)のインスタンスを、openFileInput()メソッドで取得します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;InputStream openFileInput(String fileName)&lt;br /&gt;&lt;/pre&gt;引数&lt;br /&gt;fileName:ファイル名を指定します。ファイルパスは含めません。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIucmgvSGeI/AAAAAAAABRI/0QE7PguKMx4/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIucmgvSGeI/AAAAAAAABRI/0QE7PguKMx4/s400/WS000000.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;サンプルコード&lt;br /&gt;&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.BufferedWriter;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.io.OutputStreamWriter;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;&lt;br /&gt;    /* WriteボタンClickリスナー */&lt;br /&gt;    private OnClickListener buttonWrite_OnClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {buttonWrite_OnClick(v);}};&lt;br /&gt;    /* ReadボタンClickリスナー */&lt;br /&gt;    private OnClickListener buttonRead_OnClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {buttonRead_OnClick(v);}};&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * onCreate&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //Writeボタン&lt;br /&gt;        Button btnWrite = (Button)this.findViewById(R.id.btnWrite);&lt;br /&gt;        btnWrite.setOnClickListener(buttonWrite_OnClickListener);&lt;br /&gt;        //Readボタン&lt;br /&gt;        Button btnRead = (Button)this.findViewById(R.id.btnRead);&lt;br /&gt;        btnRead.setOnClickListener(buttonRead_OnClickListener); &lt;br /&gt;    } &lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * Writeボタン処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonWrite_OnClick(View v){&lt;br /&gt;        String filename = "AndroidStudy.txt";&lt;br /&gt;  &lt;br /&gt;        OutputStream os = null;&lt;br /&gt;        BufferedWriter bw = null;&lt;br /&gt;        try{&lt;br /&gt;            try {       &lt;br /&gt;                os = this.openFileOutput(filename, MODE_PRIVATE);&lt;br /&gt;                bw = new BufferedWriter(new OutputStreamWriter(os));&lt;br /&gt;    &lt;br /&gt;                bw.append("1行目" + "\n");  &lt;br /&gt;                bw.append("2行目" + "\n");  &lt;br /&gt;    &lt;br /&gt;                bw.flush();&lt;br /&gt;    &lt;br /&gt;            } finally {&lt;br /&gt;                bw.close();&lt;br /&gt;            }&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            Toast.makeText(this, "書き込み失敗", Toast.LENGTH_SHORT).show();&lt;br /&gt;        }    &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * ReadボタンClick処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonRead_OnClick(View v){&lt;br /&gt;        String filename = "AndroidStudy.txt";&lt;br /&gt;  &lt;br /&gt;        InputStream is = null;&lt;br /&gt;        BufferedReader br = null;&lt;br /&gt;  &lt;br /&gt;        StringBuilder sb = new StringBuilder(); &lt;br /&gt;        try{&lt;br /&gt;            try {&lt;br /&gt;                is = this.openFileInput(filename);&lt;br /&gt;                br = new BufferedReader(new InputStreamReader(is)); &lt;br /&gt;     &lt;br /&gt;                String str;   &lt;br /&gt;                while((str = br.readLine()) != null){   &lt;br /&gt;                    sb.append(str +"\n");  &lt;br /&gt;                }    &lt;br /&gt;            } finally {&lt;br /&gt;                br.close();&lt;br /&gt;            }&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            Toast.makeText(this, "読み込み失敗", Toast.LENGTH_SHORT).show();&lt;br /&gt;        }&lt;br /&gt;        TextView label = (TextView)this.findViewById(R.id.label);&lt;br /&gt;        label.setText(sb.toString());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;main.xml（MainActivityのレイアウト）&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;    android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:id="@+id/label"&amp;gt;&lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt;    android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:text="Write" android:id="@+id/btnWrite"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;Button &lt;br /&gt;    android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:text="Read" android:id="@+id/btnRead"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-7712856179715555828?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/7712856179715555828/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=7712856179715555828&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/7712856179715555828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/7712856179715555828'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-files.html' title='Android ファイルの入出力（filesフォルダ)'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__ZiZX_sgyy4/TIucmgvSGeI/AAAAAAAABRI/0QE7PguKMx4/s72-c/WS000000.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-1563205302441983614</id><published>2010-09-10T21:26:00.008+09:00</published><updated>2010-11-24T17:24:52.786+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android データベースのデータを読み込む（Select)</title><content type='html'>データベースからデータを読み込みます。&lt;br /&gt;&lt;br /&gt;まず&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlite.html"&gt;Android SQLiteデータベースを作成する&lt;/a&gt;するで作成したSQLiteOpenHelperクラスを継承したDatabaseHelper.javaのインスタンスを作成します。&lt;br /&gt;このDataBaseHelperインスタンスのgetWritableDatabase()メソッドもしくはgetReadableDatabase()メソッドでSQLiteDatabaseインスタンスを取得します。&lt;br /&gt;&lt;pre class="java" name="code"&gt;DatabaseHelper dbHelper = new DatabaseHelper(this);   &lt;br /&gt;SQLiteDatabase db = dbHelper.getWritableDatabase(); &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;SELECT文を実行するにはSQLiteDatabaseインスタンスのrawQuery()メソッドやquery()メソッドを使用します。&lt;br /&gt;&lt;br /&gt;rawQuery()メソッド&lt;br /&gt;&lt;pre class="java" name="code"&gt;Cursor rawQuery (String sql, String[] selectionArgs) &lt;br /&gt;&lt;/pre&gt;引数sqlには、sql文を指定します。&lt;br /&gt;引数selectionArgsにはsql文のパラメータ（？で指定）に置き換わる値を指定します。&lt;br /&gt;&lt;br /&gt;query()メソッド&lt;br /&gt;&lt;pre class="java" name="code"&gt;Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) &lt;br /&gt;&lt;/pre&gt;&lt;pre class="java" name="code"&gt;Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)&lt;br /&gt;&lt;/pre&gt;引数distinctには、trueを指定すると検索結果から重複する行を削除します。&lt;br /&gt;引数tableには、テーブル名を指定します。&lt;br /&gt;引数columnsには、検索結果に含める列名を指定します。nullを指定すると全列の値が含まれます。&lt;br /&gt;引数selectionには、検索条件を指定します。&lt;br /&gt;引数selectionArgsには、検索条件のパラメータ（？で指定）に置き換わる値を指定します。&lt;br /&gt;引数groupByには、groupBy句を指定します。&lt;br /&gt;引数havingには、having句を指定します。&lt;br /&gt;引数orderByには、orderBy句を指定します。&lt;br /&gt;引数limitには、検索結果の上限レコードを数を指定します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;データベースからデータを取り出し、TextViewに表示するサンプルです。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIoj4agmD4I/AAAAAAAABRA/P_gj5asx884/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIoj4agmD4I/AAAAAAAABRA/P_gj5asx884/s400/WS000000.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.ContentValues;&lt;br /&gt;import android.database.Cursor;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    /* CreateDumyボタンClickリスナー */&lt;br /&gt;    private OnClickListener buttonCreateDumy_OnClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {buttonCreateDumyData_OnClick(v);}};&lt;br /&gt;    /* buttonRowQueryボタンClickリスナー 　*/&lt;br /&gt;    private OnClickListener buttonRowQuery_OnClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {buttonRowQuery_OnClick(v);}};&lt;br /&gt;    /* buttonQueryボタンClickリスナー 　*/&lt;br /&gt;    private OnClickListener buttonQuery_OnClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {buttonQuery_OnClick(v);}};&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * onCreate&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //&lt;br /&gt;        Button btnCreateDumy = (Button)this.findViewById(R.id.btnCreateDumy);&lt;br /&gt;        btnCreateDumy.setOnClickListener(buttonCreateDumy_OnClickListener);&lt;br /&gt;        Button btnRowQuery = (Button)this.findViewById(R.id.buttonRowQuery);&lt;br /&gt;        btnRowQuery.setOnClickListener(buttonRowQuery_OnClickListener);&lt;br /&gt;        Button btnQuery = (Button)this.findViewById(R.id.buttonQuery);&lt;br /&gt;        btnQuery.setOnClickListener(buttonQuery_OnClickListener);&lt;br /&gt;    } &lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * ダミーデータ作成ボタン　クリック処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonCreateDumyData_OnClick(View v){&lt;br /&gt;        DatabaseHelper dbHelper = new DatabaseHelper(this);&lt;br /&gt;        SQLiteDatabase db=dbHelper.getWritableDatabase();&lt;br /&gt;        try{&lt;br /&gt;            ContentValues values = new ContentValues();  &lt;br /&gt;            for (int i=0; i&amp;lt;10; i++){&lt;br /&gt;                values.put("Name", "yan" + (i+1));   &lt;br /&gt;                values.put("Tel", "000-000-0000");   &lt;br /&gt;                values.put("Age", 20+i);  &lt;br /&gt;                db.insert("MyTable", null, values);&lt;br /&gt;                values.clear();&lt;br /&gt;            } &lt;br /&gt;        }finally{&lt;br /&gt;            db.close();&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * RowQueryボタン　クリック処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonRowQuery_OnClick(View v){&lt;br /&gt;        //SQL作成&lt;br /&gt;        StringBuilder sql = new StringBuilder();&lt;br /&gt;        sql.append(" SELECT");&lt;br /&gt;        sql.append(" No");&lt;br /&gt;        sql.append(" ,Name");&lt;br /&gt;        sql.append(" ,Tel");&lt;br /&gt;        sql.append(" ,Age");&lt;br /&gt;        sql.append(" FROM MyTable;");&lt;br /&gt;        //rawQueryメソッドでデータを取得&lt;br /&gt;        DatabaseHelper dbHelper = new DatabaseHelper(this);&lt;br /&gt;        SQLiteDatabase db=dbHelper.getReadableDatabase();&lt;br /&gt;        try{&lt;br /&gt;            Cursor cursor = db.rawQuery(sql.toString(), null); &lt;br /&gt;            //TextViewに表示&lt;br /&gt;            StringBuilder text = new StringBuilder();&lt;br /&gt;            while (cursor.moveToNext()){&lt;br /&gt;                text.append(cursor.getInt(0));&lt;br /&gt;                text.append("," + cursor.getString(1));&lt;br /&gt;                text.append("," + cursor.getString(2));&lt;br /&gt;                text.append("," + cursor.getString(3));&lt;br /&gt;                text.append("\n");&lt;br /&gt;            }&lt;br /&gt;        }finally{&lt;br /&gt;            db.close();&lt;br /&gt;        }&lt;br /&gt;        TextView lblList = (TextView)this.findViewById(R.id.labelList);&lt;br /&gt;        lblList.setText(text);&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * queryボタン　クリック処理&lt;br /&gt;     */&lt;br /&gt;    private  void buttonQuery_OnClick(View v){&lt;br /&gt;        //queryメソッドでデータを取得&lt;br /&gt;        String[] cols = {"No","Name","Tel","Age"};&lt;br /&gt;        String selection = "No = ?";&lt;br /&gt;        String[] selectionArgs = {"5"};&lt;br /&gt;        String groupBy = null;&lt;br /&gt;        String having = null;&lt;br /&gt;        String orderBy = null;&lt;br /&gt;        DatabaseHelper dbHelper = new DatabaseHelper(this);&lt;br /&gt;        SQLiteDatabase db=dbHelper.getReadableDatabase();&lt;br /&gt;        try{&lt;br /&gt;            Cursor cursor = db.query("MyTable", cols, selection, selectionArgs, groupBy, having, orderBy);&lt;br /&gt;            //TextViewに表示&lt;br /&gt;            StringBuilder text = new StringBuilder();&lt;br /&gt;            while (cursor.moveToNext()){&lt;br /&gt;                text.append(cursor.getInt(0));&lt;br /&gt;                text.append("," + cursor.getString(1));&lt;br /&gt;                text.append("," + cursor.getString(2));&lt;br /&gt;                text.append("," + cursor.getString(3));&lt;br /&gt;                text.append("\n");&lt;br /&gt;            }&lt;br /&gt;        }finally{&lt;br /&gt;            db.close();&lt;br /&gt;        }&lt;br /&gt;        TextView lblList = (TextView)this.findViewById(R.id.labelList);&lt;br /&gt;        lblList.setText(text);&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;DatabaseHelper.java &lt;br /&gt;&lt;pre class="java" name="code"&gt;import android.content.Context;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.database.sqlite.SQLiteOpenHelper;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class DatabaseHelper extends SQLiteOpenHelper {&lt;br /&gt; &lt;br /&gt;    /* データベース名 */&lt;br /&gt;    private final static String DB_NAME = "androidstudydb";&lt;br /&gt;    /* データベースのバージョン */&lt;br /&gt;    private final static int DB_VER = 1;&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * コンストラクタ&lt;br /&gt;      */&lt;br /&gt;    public DatabaseHelper(Context context) {&lt;br /&gt;        super(context, DB_NAME, null, DB_VER);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /*&lt;br /&gt;     * onCreateメソッド&lt;br /&gt;     * データベースが作成された時に呼ばれます。&lt;br /&gt;     * テーブルの作成などを行います。&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(SQLiteDatabase db) {&lt;br /&gt;        String sql = "";&lt;br /&gt;        sql += "create table MyTable (";&lt;br /&gt;        sql += " No integer primary key autoincrement";&lt;br /&gt;        sql += ",Name text not null";&lt;br /&gt;        sql += ",Tel text";&lt;br /&gt;        sql += ",Age integer";&lt;br /&gt;        sql += ")";&lt;br /&gt;        db.execSQL(sql);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /*&lt;br /&gt;     * onUpgradeメソッド&lt;br /&gt;     * onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれます。&lt;br /&gt;     * 現在のレコードを退避し、テーブルを再作成した後、退避したレコードを戻すなどの処理を行います。&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;main.xml(MainActivityのレイアウト)&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;    android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt;    android:id="@+id/labelList"&amp;gt;&lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt;    android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt;    android:id="@+id/btnCreateDumy" android:text="CreateDumy"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt;    android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt;    android:text="rowQuery()" android:id="@+id/buttonRowQuery"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt;    android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt;    android:text="query()" android:id="@+id/buttonQuery"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlite.html"&gt;Android SQLiteデータベースを作成する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitegui.html"&gt;Android SQLiteのGUIツール &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-insertupdatedelete.html"&gt;Android データベースにデータを書き込む（Insert、Update、Delete）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-select.html"&gt;Android データベースのデータを読み込む（Select)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitesql.html"&gt;Android SQLiteデータベースを作成する（SQL文をリソースファイルに定義する） &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-1563205302441983614?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/1563205302441983614/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=1563205302441983614&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1563205302441983614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1563205302441983614'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-select.html' title='Android データベースのデータを読み込む（Select)'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__ZiZX_sgyy4/TIoj4agmD4I/AAAAAAAABRA/P_gj5asx884/s72-c/WS000000.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-9214300881511526435</id><published>2010-09-10T16:00:00.008+09:00</published><updated>2010-11-24T15:13:26.618+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android データベースにデータを書き込む（Insert、Update、Delete）</title><content type='html'>データベースの書き込みを行います。&lt;br /&gt;まず&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlite.html"&gt;Android SQLiteデータベースを作成する&lt;/a&gt;で作成した&lt;br /&gt;SQLiteOpenHelperクラスを継承したDatabaseHelper.javaのインスタンスを作成します。&lt;br /&gt;このDataBaseHelperインスタンスのgetWritableDatabase()メソッドでSQLiteDatabaseインスタンスを取得します。&lt;br /&gt;&lt;pre name="code" class="java"&gt;DatabaseHelper dbHelper = new DataBaseHelper();&lt;br /&gt;SQLiteDatabase db = new dbHelper.getWritableDatabase();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;SQLiteDatabaseインスタンスには以下のようなメソッドがあります。&lt;br /&gt;execSQL()メソッド：select以外のsql文を指定して実行します。実行に失敗した場合はSQLExceptionをスローします。&lt;br /&gt;&lt;pre name="code" class="java"&gt;void execSQL(String sql)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;execSQL()メソッド：select以外のsql文を指定して実行します。実行に失敗した場合はSQLExceptionをスローします。&lt;br /&gt;引数bindArgsにはsql文でパラメータ（？で指定）に置き換わる値を指定します。指定できる値の型はbyte[]、String、Long、Doubleのみ。&lt;br /&gt;&lt;pre name="code" class="java"&gt;void execSQL(String sql,Object[] bindArgs)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;insert()メソッド：テーブルにデータを追加します。&lt;br /&gt;戻り値は正常に挿入でき場合RowIDが戻り、失敗した場合は-1が戻ります。&lt;br /&gt;引数tableにはテーブル名を指定します。&lt;br /&gt;引数nullColumnHackにはデータを挿入する際、Null値が許されない列に値が指定されていない場合、代わりに利用される値を指定します。&lt;br /&gt;引数valuesには登録レコードの列名と値がマッピングされたContentValuesインスタンスを設定します。&lt;br /&gt;&lt;pre name="code" class="java"&gt;long insert(String table, String nullColumnHack, ContentValues values)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;update()メソッド：テーブルにデータを更新します。&lt;br /&gt;戻り値は正常に更新でき場合が更新したレコード数が戻り、失敗した場合は-1が戻ります。&lt;br /&gt;引数tableにはテーブル名を指定します。&lt;br /&gt;引数valuesには更新レコードの列名と値がマッピングされたContentValuesインスタンスを設定します。&lt;br /&gt;引数whereClauseには更新対象レコードを検索するための条件を指定します。&lt;br /&gt;引数whereArgsにはwhereClauseにパラメータ（？で指定）が含まれる場合に置き変わる値を指定します。不要な場合はnullを指定します。&lt;br /&gt;&lt;pre name="code" class="java"&gt;int update(String table, ContentValues values, String whereClause, String[] whereArgs)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;delete()メソッド：テーブルからデータを削除します。&lt;br /&gt;引数tableにはテーブル名を指定します。&lt;br /&gt;引数whereClauseには削除対象レコードを検索するための条件を指定します。&lt;br /&gt;引数whereArgsにはwhereClauseにパラメータ（？で指定）が含まれる場合に置き変わる値を指定します。不要な場合はnullを指定します。&lt;br /&gt;&lt;pre name="code" class="java"&gt;int delete(String table, String whereClause, String[] whereArgs)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;データベースにデータを登録・更新・削除を行うサンプルコードです。&lt;br /&gt;MainActivty.java&lt;br /&gt;&lt;pre name="code" class="java"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.ContentValues;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;   &lt;br /&gt;    /* InsertボタンのClickリスナー */&lt;br /&gt;    private OnClickListener buttonInsert_ClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {buttonInsert_Click(v);}};&lt;br /&gt;    /* UpdateボタンのClickリスナー */&lt;br /&gt;    private OnClickListener buttonUpdate_ClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {buttonUpdate_Click(v);}};&lt;br /&gt;    /* DeleteボタンのClickリスナー */&lt;br /&gt;    private OnClickListener buttonDelete_ClickListener = new OnClickListener(){&lt;br /&gt;        public void onClick(View v) {buttonDelete_Click(v);}};&lt;br /&gt;  &lt;br /&gt;    @Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //ボタンにClickリスナーを設定する。&lt;br /&gt;        Button buttonInsert = (Button)this.findViewById(R.id.buttonInsert);&lt;br /&gt;        buttonInsert.setOnClickListener(buttonInsert_ClickListener);&lt;br /&gt;        Button buttonUpdate = (Button)this.findViewById(R.id.buttonUpdate);&lt;br /&gt;        buttonUpdate.setOnClickListener(buttonUpdate_ClickListener);&lt;br /&gt;        Button buttonDelete = (Button)this.findViewById(R.id.buttonDelete);&lt;br /&gt;        buttonDelete.setOnClickListener(buttonDelete_ClickListener);&lt;br /&gt;    } &lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * InsertボタンClick処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonInsert_Click(View v){&lt;br /&gt;        ContentValues values = new ContentValues();&lt;br /&gt;        values.put("Name", "yan");&lt;br /&gt;        values.put("Tel", "0000-1234-5678");&lt;br /&gt;        values.put("Age", 18);&lt;br /&gt; &lt;br /&gt;        DatabaseHelper dbHelper = new DatabaseHelper(this);&lt;br /&gt;        SQLiteDatabase db = dbHelper.getWritableDatabase();&lt;br /&gt; 　　　　long ret;&lt;br /&gt;        try {&lt;br /&gt;            ret = db.insert("MyTable", null, values);&lt;br /&gt;        } finally {&lt;br /&gt;            db.close();&lt;br /&gt;        }&lt;br /&gt;        if (ret == -1) {&lt;br /&gt;            Toast.makeText(this, "Insert失敗", Toast.LENGTH_SHORT).show();&lt;br /&gt;        } else { &lt;br /&gt;            Toast.makeText(this, "Insert成功", Toast.LENGTH_SHORT).show();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * UpdateボタンClick処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonUpdate_Click(View v){&lt;br /&gt;        ContentValues values = new ContentValues();&lt;br /&gt;        values.put("Age",24);&lt;br /&gt;        String whereClause = "No = ?";&lt;br /&gt;        String whereArgs[] = new String[1];&lt;br /&gt;        whereArgs[0] = "1";&lt;br /&gt;  &lt;br /&gt;        DatabaseHelper dbHelper = new DatabaseHelper(this);&lt;br /&gt;        SQLiteDatabase db = dbHelper.getWritableDatabase(); &lt;br /&gt;        int ret;&lt;br /&gt;        try {&lt;br /&gt;            ret = db.update("MyTable", values, whereClause, whereArgs);&lt;br /&gt;        } finally {&lt;br /&gt;            db.close();&lt;br /&gt;        }&lt;br /&gt;        if (ret == -1){&lt;br /&gt;            Toast.makeText(this, "Update失敗", Toast.LENGTH_SHORT).show();&lt;br /&gt;        } else { &lt;br /&gt;            Toast.makeText(this, "Update成功", Toast.LENGTH_SHORT).show();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    /* DeleteボタンClick処理 */&lt;br /&gt;    private void buttonDelete_Click(View v){&lt;br /&gt;        String whereClause = "No = ?";&lt;br /&gt;        String whereArgs[] = new String[1];&lt;br /&gt;        whereArgs[0] = "1";&lt;br /&gt;  &lt;br /&gt;        DatabaseHelper dbHelper = new DatabaseHelper(this);&lt;br /&gt;        SQLiteDatabase db = dbHelper.getWritableDatabase(); &lt;br /&gt;        int ret;&lt;br /&gt;        try {&lt;br /&gt;            ret = db.delete("MyTable", whereClause, whereArgs);&lt;br /&gt;        } finally {&lt;br /&gt;            db.close();&lt;br /&gt;        }&lt;br /&gt;        if (ret == -1){&lt;br /&gt;            Toast.makeText(this, "Delete失敗", Toast.LENGTH_SHORT).show();&lt;br /&gt;        } else { &lt;br /&gt;            Toast.makeText(this, "Delete成功", Toast.LENGTH_SHORT).show();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;DatabaseHelper.java&lt;br /&gt;&lt;pre name="code" class="java"&gt;import android.content.Context;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.database.sqlite.SQLiteOpenHelper;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class DatabaseHelper extends SQLiteOpenHelper {&lt;br /&gt; &lt;br /&gt;    /* データベース名 */&lt;br /&gt;    private final static String DB_NAME = "androidstudydb";&lt;br /&gt;    /* データベースのバージョン */&lt;br /&gt;    private final static int DB_VER = 1;&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * コンストラクタ&lt;br /&gt;      */&lt;br /&gt;    public DatabaseHelper(Context context) {&lt;br /&gt;        super(context, DB_NAME, null, DB_VER);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /*&lt;br /&gt;     * onCreateメソッド&lt;br /&gt;     * データベースが作成された時に呼ばれます。&lt;br /&gt;     * テーブルの作成などを行います。&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(SQLiteDatabase db) {&lt;br /&gt;        String sql = "";&lt;br /&gt;        sql += "create table MyTable (";&lt;br /&gt;        sql += " No integer primary key autoincrement";&lt;br /&gt;        sql += ",Name text not null";&lt;br /&gt;        sql += ",Tel text";&lt;br /&gt;        sql += ",Age integer";&lt;br /&gt;        sql += ")";&lt;br /&gt;        db.execSQL(sql);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /*&lt;br /&gt;     * onUpgradeメソッド&lt;br /&gt;     * onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれます。&lt;br /&gt;     * 現在のレコードを退避し、テーブルを再作成した後、退避したレコードを戻すなどの処理を行います。&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MainActivityのレイアウト（main.xml)&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt; android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:id="@+id/buttonInsert" android:text="Insert"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt; android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:id="@+id/buttonUpdate" android:text="Update"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt; android:layout_width="wrap_content" android:layout_height="wrap_content" &lt;br /&gt; android:id="@+id/buttonDelete" android:text="Delete"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlite.html"&gt;Android SQLiteデータベースを作成する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitegui.html"&gt;Android SQLiteのGUIツール &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-insertupdatedelete.html"&gt;Android データベースにデータを書き込む（Insert、Update、Delete）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-select.html"&gt;Android データベースのデータを読み込む（Select)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitesql.html"&gt;Android SQLiteデータベースを作成する（SQL文をリソースファイルに定義する） &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-9214300881511526435?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/9214300881511526435/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=9214300881511526435&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/9214300881511526435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/9214300881511526435'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-insertupdatedelete.html' title='Android データベースにデータを書き込む（Insert、Update、Delete）'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-5753014471708289468</id><published>2010-09-09T21:22:00.006+09:00</published><updated>2010-11-24T15:12:56.024+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android SQLiteのGUIツール</title><content type='html'>Androidで作成したSQLiteのDBをみるフリーのツールは色々あります。&lt;br /&gt;&lt;br /&gt;詳しくは愚鈍人さんのページにあります。&lt;br /&gt;&lt;a href="http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=72#DBViewer"&gt;http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=72#DBViewer&lt;/a&gt;&lt;br /&gt;他にも「PupSQLite」などがあります。&lt;br /&gt;&lt;a href="https://www.eonet.ne.jp/~pup/software.html"&gt;https://www.eonet.ne.jp/~pup/software.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;わたしは「PupSQLite」を使ってみました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まずAndroidのデータベースファイルをPCにエクスポートします。&lt;br /&gt;Eclipseからエミュレータを起動した状態で&lt;br /&gt;メニューより「ウインドウ」→「パースペクティブを開く」→「DDMS」を選択します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIjROfnNr7I/AAAAAAAABQw/N44vH6T5QKo/s1600/WS000004.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="273" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIjROfnNr7I/AAAAAAAABQw/N44vH6T5QKo/s400/WS000004.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;DDMSのファイルエクスプローラよりデータベースファイルを選択し、右上のボタン「Pull a file from the device」をクリックします。&lt;br /&gt;データベースは「data/data/&amp;lt;パッケージ名&amp;gt;/databases/」に作成されます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIjQ60KSTXI/AAAAAAAABQY/-Zh0h8zxct4/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIjQ60KSTXI/AAAAAAAABQY/-Zh0h8zxct4/s400/WS000000.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;コマンドラインからadbを使用してファイルをエクスポートする場合は&lt;br /&gt;「adb pull /data/data/&amp;lt;パッケージ名&amp;gt;/databases/&amp;lt;データベース名&amp;gt; PCのファイル名」 と入力します。&lt;br /&gt;ここでは&lt;br /&gt;adb pull /data/data/my.study.android/databases/androidstudydb C:¥androidstudydb&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;あとはPupSQLiteをダウンロードして解凍したフォルダにある「PupSQLite.exe」を実行し&lt;br /&gt;「ファイルを開く」からエクスポートしたデータベースファイルを選択するだけです。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TImjReM3MsI/AAAAAAAABQ4/PFOBabk9EvA/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="341" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TImjReM3MsI/AAAAAAAABQ4/PFOBabk9EvA/s400/WS000000.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlite.html"&gt;Android SQLiteデータベースを作成する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitegui.html"&gt;Android SQLiteのGUIツール &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-insertupdatedelete.html"&gt;Android データベースにデータを書き込む（Insert、Update、Delete）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-select.html"&gt;Android データベースのデータを読み込む（Select)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitesql.html"&gt;Android SQLiteデータベースを作成する（SQL文をリソースファイルに定義する） &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-5753014471708289468?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/5753014471708289468/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=5753014471708289468&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5753014471708289468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5753014471708289468'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-sqlitegui.html' title='Android SQLiteのGUIツール'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TIjROfnNr7I/AAAAAAAABQw/N44vH6T5QKo/s72-c/WS000004.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4776927206517708138</id><published>2010-09-09T20:49:00.012+09:00</published><updated>2010-11-24T15:12:20.010+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android SQLiteデータベースを作成する</title><content type='html'>AndroidではSQLiteがサポートされています。&lt;br /&gt;データベースはアプリケーション毎に管理され、他のアプリケーションからは直接操作できません。&lt;br /&gt;&lt;br /&gt;SQLiteのデータ型は下記の5種類のみ&lt;br /&gt;INTEGER・・・符号付整数&lt;br /&gt;REAL・・・浮動小数点&lt;br /&gt;TEXT・・・テキスト&lt;br /&gt;BLOB・・・バイナリデータ&lt;br /&gt;NULL・・・NULL&lt;br /&gt;&lt;br /&gt;データベースの作成にはSQLiteOpenHelperクラスを使用すると便利です。&lt;br /&gt;このクラスを継承したデータベースヘルパークラスを作成し、データベースの作成、アップグレードを実装します。&lt;br /&gt;&lt;br /&gt;SQLiteOpenHelperクラスのコンストラクタ&lt;br /&gt;&lt;pre class="java" name="code"&gt;SQLiteOpenHelper(Context context, String fileName, SQLiteDatabase.CursorFactory factory, int version)&lt;/pre&gt;context・・・コンテキストオブジェクト&lt;br /&gt;fileName・・・データベース名&lt;br /&gt;factory・・・よくわかりません。通常nullを指定&lt;br /&gt;version・・・データベースのバージョン&lt;br /&gt;&lt;br /&gt;onCreate()メソッドはデータベースが作成された時に呼ばれます。&lt;br /&gt;テーブルの作成などを行います。&lt;br /&gt;&lt;pre class="java" name="code"&gt;void onCreate(SQLiteDatabase db)&lt;/pre&gt;&lt;br /&gt;onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれます。&lt;br /&gt;現在のレコードを退避し、テーブルを再作成した後、退避したレコードを戻すなどの処理を行います。&lt;br /&gt;&lt;pre class="java" name="code"&gt;&amp;gt;void onUpgrade(SQLite db, int oldVersion, int newVersion)&lt;/pre&gt;&lt;br /&gt;DatabaseHelper.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.database.sqlite.SQLiteOpenHelper;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class DatabaseHelper extends SQLiteOpenHelper {&lt;br /&gt; &lt;br /&gt;    /* データベース名 */&lt;br /&gt;    private final static String DB_NAME = "androidstudydb";&lt;br /&gt;    /* データベースのバージョン */&lt;br /&gt;    private final static int DB_VER = 1;&lt;br /&gt; &lt;br /&gt;    /*&lt;br /&gt;     * コンストラクタ&lt;br /&gt;      */&lt;br /&gt;    public DatabaseHelper(Context context) {&lt;br /&gt;        super(context, DB_NAME, null, DB_VER);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /*&lt;br /&gt;     * onCreateメソッド&lt;br /&gt;     * データベースが作成された時に呼ばれます。&lt;br /&gt;     * テーブルの作成などを行います。&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(SQLiteDatabase db) {&lt;br /&gt;        String sql = "";&lt;br /&gt;        sql += "create table MyTable (";&lt;br /&gt;        sql += " No integer primary key autoincrement";&lt;br /&gt;        sql += ",Name text not null";&lt;br /&gt;        sql += ",Tel text";&lt;br /&gt;        sql += ",Age integer";&lt;br /&gt;        sql += ")";&lt;br /&gt;        db.execSQL(sql);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /*&lt;br /&gt;     * onUpgradeメソッド&lt;br /&gt;     * onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれます。&lt;br /&gt;     * 現在のレコードを退避し、テーブルを再作成した後、退避したレコードを戻すなどの処理を行います。&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.database.sqlite.SQLiteDatabase;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;   &lt;br /&gt;    @Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.sub);&lt;br /&gt;        //データベースヘルパーのインスタンスを作成する（まだデータベースはできない）&lt;br /&gt;        DatabaseHelper dbHelper = new DatabaseHelper(this);&lt;br /&gt;        //データベースオブジェクトを取得する（データベースにアクセスすると作成される。）&lt;br /&gt;        SQLiteDatabase db = dbHelper.getWritableDatabase(); &lt;br /&gt;        //データベースを閉じる&lt;br /&gt;        db.close();&lt;br /&gt;    }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;作成したデータベースを確認するには、&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitegui.html"&gt;Android SQLiteのGUIツール&lt;/a&gt;を見てください。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【関連項目】&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlite.html"&gt;Android SQLiteデータベースを作成する &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitegui.html"&gt;Android SQLiteのGUIツール &lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-insertupdatedelete.html"&gt;Android データベースにデータを書き込む（Insert、Update、Delete）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-select.html"&gt;Android データベースのデータを読み込む（Select)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2010/09/android-sqlitesql.html"&gt;Android SQLiteデータベースを作成する（SQL文をリソースファイルに定義する） &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4776927206517708138?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4776927206517708138/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4776927206517708138&amp;isPopup=true' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4776927206517708138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4776927206517708138'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-sqlite.html' title='Android SQLiteデータベースを作成する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8262967867982229000</id><published>2010-09-06T21:45:00.003+09:00</published><updated>2010-09-07T11:56:48.491+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android 別のアクティビティを開く（戻り値を受け取る）</title><content type='html'>&lt;a href="http://yan-note.blogspot.com/2010/09/android_06.html"&gt;Android 別のアクティビティを開く(戻り値 を受け取らない） &lt;/a&gt;では開くアクティビティに対して情報を渡しましたが 今度は開いたアクティビティから情報を受け取る方法です。&lt;br /&gt;&lt;br /&gt;MainActivityでEditTextに値を入力し次へをクリックする。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TITiQ6cIXZI/AAAAAAAABPo/4yKw359_Tp4/s1600/%EF%BC%91.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TITiQ6cIXZI/AAAAAAAABPo/4yKw359_Tp4/s320/%EF%BC%91.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;SubActivityを開き、MainActivityで入力した値をTextViewに表示する。&lt;br /&gt;SubActivityでEditTextに値を入力しOKをクリックする。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TITiWrQFqlI/AAAAAAAABPw/gJEXXsiPe1o/s1600/%EF%BC%92.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TITiWrQFqlI/AAAAAAAABPw/gJEXXsiPe1o/s320/%EF%BC%92.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;MainActivityに戻り、SubActivityで入力した値をTextViewに表示する。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIWp5vQMY7I/AAAAAAAABQA/hASSi_R_WkY/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIWp5vQMY7I/AAAAAAAABQA/hASSi_R_WkY/s320/WS000000.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;別のアクティビティを開くにはインテント（Intent)クラスを使用します。&lt;br /&gt;&lt;br /&gt;Intentクラスのコンストラクタの第1引数に現画面アクティビティのインスタンス、第2引数に呼び出すアクティビティのクラスを指定して&lt;br /&gt;Intentインスタンスを作成します。&lt;br /&gt;Intent(Context packageContext, Class cls)&lt;br /&gt;&lt;br /&gt;IntentインスタンスのputExtra()メソッドを使って、アクティビティに渡したい値を指定します。&lt;br /&gt;値はMapで保持されているので、キーと値のペアで設定します。&lt;br /&gt;public Intent putExtra (String name, String value) &lt;br /&gt;&lt;br /&gt;開いたアクティビティから情報を受け取らない場合は&lt;br /&gt;ActivityインスタンスのstartActivity()メソッドを使ってアクティビティを起動します。&lt;br /&gt;public void startActivity (Intent intent) &lt;br /&gt;&lt;br /&gt;開いたアクティビティから情報を受け取る場合は、&lt;br /&gt;AcrivityインスタンスstartActivityForResult()メソッドを使ってアクティビティを起動します。&lt;br /&gt;第1引数には、インテントインスタンスを渡します。&lt;br /&gt;第2引数には、リクエストコードと呼ばれる値を指定します。&lt;br /&gt;これは開いたアクティビティから再び戻ってきたときに、どのアクティビティから戻ってきたかを区別するための値です。0以上の数値を指定します。&lt;br /&gt;public void startActivityForResult (Intent intent, int requestCode) &lt;br /&gt;&lt;br /&gt;開いたアクティビティから戻ってきたときは、onActivityResulty()メソッドが呼ばれます。&lt;br /&gt;protected void onActivityResult(int requestCode, int resultCode, Intent intent)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;開いたアクティビティでは&lt;br /&gt;ActivityインスタンスのgetIntent()メソッドでIntentインスタンスを取得します。&lt;br /&gt;public Intent getIntent () &lt;br /&gt;&lt;br /&gt;IntentインスタンスのgetExtras()メソッドで渡された値のMapを取得します。&lt;br /&gt;public Bundle getExtras () &lt;br /&gt;&lt;br /&gt;元の画面に戻す情報はsetResult()メソッドで設定します。&lt;br /&gt;public final void setResult (int resultCode, Intent data) &lt;br /&gt;&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;  &lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt; &lt;br /&gt;    private static final int SUBACTIVITY = 1;&lt;br /&gt; &lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //次へボタンのイベントリスナー設定&lt;br /&gt;        Button buttonNext = (Button)findViewById(R.id.buttonNext);&lt;br /&gt;        buttonNext.setOnClickListener(new View.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(View v) {&lt;br /&gt;                buttonNext_OnClickListener(v);    &lt;br /&gt;            }});&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /*&lt;br /&gt;     * &lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {&lt;br /&gt;        super.onActivityResult(requestCode, resultCode, intent);&lt;br /&gt;        TextView label = (TextView)findViewById(R.id.labelFromSub);&lt;br /&gt;        if (requestCode == SUBACTIVITY){&lt;br /&gt;            if (resultCode == RESULT_OK){&lt;br /&gt;                Bundle extras = intent.getExtras();&lt;br /&gt;                if (extras != null){&lt;br /&gt;                    label.setText("SubActivityで入力した値:"+extras.getString("SUB_INPUT_STRING"));&lt;br /&gt;                }else{&lt;br /&gt;                    label.setText("SubActivityで入力した値:" + "extra is null");   &lt;br /&gt;                 }&lt;br /&gt;            }else{&lt;br /&gt;                label.setText("SubActivityで入力した値:");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /*&lt;br /&gt;     * 次へボタンクリック処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonNext_OnClickListener(View v) {&lt;br /&gt;        //エディットボックスの値を渡してSubActivityを開く&lt;br /&gt;        EditText textInput = (EditText)findViewById(R.id.textMain);&lt;br /&gt;        Intent intent = new Intent(this,SubActivity.class);&lt;br /&gt;        intent.putExtra("MAIN_INPUT_STRING", textInput.getText().toString());&lt;br /&gt;        //startActivity(intent);&lt;br /&gt;        startActivityForResult(intent, SUBACTIVITY);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;SubActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class SubActivity extends Activity {&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.sub);&lt;br /&gt;        //OKボタンのイベントリスナー設定&lt;br /&gt;        Button buttonOk = (Button)findViewById(R.id.buttonOk);&lt;br /&gt;        buttonOk.setOnClickListener(new View.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(View v) {&lt;br /&gt;                buttonOK_OnClickListener(v);    &lt;br /&gt;            }});&lt;br /&gt;        //キャンセルボタンのイベントリスナー設定&lt;br /&gt;        Button buttonCancel =(Button)findViewById(R.id.buttonCancel);&lt;br /&gt;        buttonCancel.setOnClickListener(new View.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(View v) {&lt;br /&gt;                buttonCancel_OnClickListener(v);    &lt;br /&gt;            }});&lt;br /&gt;        //MainActivityから受け取った値を表示します。&lt;br /&gt;        TextView label = (TextView)findViewById(R.id.labelFromMain);&lt;br /&gt;        Intent intent = getIntent();&lt;br /&gt;        Bundle extras = intent.getExtras();&lt;br /&gt;        if (extras != null){&lt;br /&gt;            label.setText("MainActivityで入力した値:"+extras.getString("MAIN_INPUT_STRING"));&lt;br /&gt;        }else{&lt;br /&gt;            label.setText("MainActivityで入力した値:" + "extra is null");   &lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;    /*&lt;br /&gt;     * キャンセルボタンクリック処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonCancel_OnClickListener(View v) {&lt;br /&gt;        setResult(RESULT_CANCELED);&lt;br /&gt;        finish();&lt;br /&gt;    }&lt;br /&gt;    /*&lt;br /&gt;     * OKボタンクリック処理&lt;br /&gt;     */&lt;br /&gt;    private void buttonOK_OnClickListener(View v) {&lt;br /&gt;        EditText textInput = (EditText)findViewById(R.id.textSub);&lt;br /&gt;        Intent intent = new Intent();&lt;br /&gt;        intent.putExtra("SUB_INPUT_STRING", textInput.getText().toString());&lt;br /&gt;        setResult(RESULT_OK,intent);&lt;br /&gt;        finish();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;MainActivityのレイアウト（res/layout/main.xml)&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;EditText &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:layout_width="fill_parent" &lt;br /&gt;    android:id="@+id/textMain"&amp;gt;&lt;br /&gt;&amp;lt;/EditText&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt;    android:layout_width="wrap_content" &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:id="@+id/buttonNext" &lt;br /&gt;    android:text="次へ"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;TextView &lt;br /&gt;    android:layout_width="wrap_content" &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:text="SubActivtyで入力した値：" &lt;br /&gt;    android:id="@+id/labelFromSub"&amp;gt;&lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;SubActivityのレイアウト（res/layout/sub.xml)&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout&lt;br /&gt;  xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;  android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical"&amp;gt;&lt;br /&gt;&amp;lt;TextView android:layout_height="wrap_content" android:text="MainActivityで入力した値:" android:id="@+id/labelFromMain" android:layout_width="fill_parent"&amp;gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;EditText &lt;br /&gt; android:layout_height="wrap_content" &lt;br /&gt; android:layout_width="fill_parent" &lt;br /&gt; android:id="@+id/textSub"&amp;gt;&lt;br /&gt;&amp;lt;/EditText&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:id="@+id/buttonOk" &lt;br /&gt;    android:text="OK" &lt;br /&gt;    android:layout_width="wrap_content"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt;    android:layout_width="wrap_content" &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:id="@+id/buttonCancel" &lt;br /&gt;    android:text="Cancel"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8262967867982229000?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8262967867982229000/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8262967867982229000&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8262967867982229000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8262967867982229000'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_4530.html' title='Android 別のアクティビティを開く（戻り値を受け取る）'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__ZiZX_sgyy4/TITiQ6cIXZI/AAAAAAAABPo/4yKw359_Tp4/s72-c/%EF%BC%91.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-2010073540288491111</id><published>2010-09-06T14:24:00.006+09:00</published><updated>2010-09-06T17:14:01.954+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android 別のアクティビティを開く(戻り値を受け取らない）</title><content type='html'>&lt;a href="http://yan-note.blogspot.com/2010/09/android_2905.html"&gt;Android プロジェクトに新しいアクティビティを追加する &lt;/a&gt;で作成したSubActivityに、MainActivityで入力した値を渡して開きます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MainActivityでEditTextに値を入力し次へをクリックする。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIR62MmBD6I/AAAAAAAABPg/yndLmQ5ls3A/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIR62MmBD6I/AAAAAAAABPg/yndLmQ5ls3A/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;SubActivityを開き、MainActivityで入力した値をTextViewに表示する。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIR6xLPy7GI/AAAAAAAABPY/64BQua_EWMw/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIR6xLPy7GI/AAAAAAAABPY/64BQua_EWMw/s320/1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;別のアクティビティを開くにはインテント（Intent)クラスを使用します。&lt;br /&gt;&lt;br /&gt;Intentクラスのコンストラクタの第1引数に現画面アクティビティのインスタンス、第2引数に呼び出すアクティビティのクラスを指定して&lt;br /&gt;Intentインスタンスを作成します。&lt;br /&gt;Intent(Context packageContext, Class cls)&lt;br /&gt;&lt;br /&gt;IntentインスタンスのputExtra()メソッドを使って、アクティビティに渡したい値を指定します。&lt;br /&gt;値はMapで保持されているので、キーと値のペアで設定します。&lt;br /&gt;public Intent putExtra (String name, String value) &lt;br /&gt;&lt;br /&gt;ActivityインスタンスのstartActivity()メソッドを使ってアクティビティを起動します。&lt;br /&gt;public void startActivity (Intent intent) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;開いたアクティビティでは&lt;br /&gt;ActivityインスタンスのgetIntent()メソッドでIntentインスタンスを取得します。&lt;br /&gt;public Intent getIntent () &lt;br /&gt;&lt;br /&gt;IntentインスタンスのgetExtras()メソッドで渡された値のMapを取得します。&lt;br /&gt;public Bundle getExtras () &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MainActivity.java&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.Button;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        &lt;br /&gt;        Button buttonNext = (Button)findViewById(R.id.buttonNext);&lt;br /&gt;        buttonNext.setOnClickListener(new View.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(View v) {&lt;br /&gt;                buttonNext_OnClickListener(v);    &lt;br /&gt;            }});&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /*&lt;br /&gt;     * 次へボタンクリック処理&lt;br /&gt;     */&lt;br /&gt;    public void buttonNext_OnClickListener(View v) {&lt;br /&gt;        //SubActivityを起動します。&lt;br /&gt;        EditText textInput = (EditText)findViewById(R.id.textInput);&lt;br /&gt;        Intent intent = new Intent(this,SubActivity.class);&lt;br /&gt;        intent.putExtra("INPUT_STRING", textInput.getText().toString());&lt;br /&gt;        startActivity(intent);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;SubActivity.java&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class SubActivity extends Activity {&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.sub);&lt;br /&gt;  &lt;br /&gt;        TextView labelInput = (TextView)findViewById(R.id.labelInput);&lt;br /&gt;        //インテントより渡された値を取得します。&lt;br /&gt;        Intent intent = getIntent();&lt;br /&gt;        Bundle extras = intent.getExtras();&lt;br /&gt;        if (extras != null){&lt;br /&gt;            labelInput.setText(extras.getString("INPUT_STRING"));&lt;br /&gt;        }else{&lt;br /&gt;            labelInput.setText("extra is null");   &lt;br /&gt;        }&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MainActivityのレイアウト（res/layout/main.xml)&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;EditText &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:layout_width="fill_parent" &lt;br /&gt;    android:id="@+id/textInput"&amp;gt;&lt;br /&gt;&amp;lt;/EditText&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button &lt;br /&gt;    android:layout_width="wrap_content" &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:id="@+id/buttonNext" &lt;br /&gt;    android:text="次へ"&amp;gt;&lt;br /&gt;&amp;lt;/Button&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;SubActivityのレイアウト（res/layout/sub.xml)&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout&lt;br /&gt;  xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;  android:layout_width="wrap_content"&lt;br /&gt;  android:layout_height="wrap_content"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;TextView android:&lt;br /&gt;    layout_width="wrap_content" &lt;br /&gt;    android:layout_height="wrap_content" &lt;br /&gt;    android:id="@+id/labelInput" &lt;br /&gt;    android:text='"入力した値:"'&amp;gt;&lt;br /&gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-2010073540288491111?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/2010073540288491111/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=2010073540288491111&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2010073540288491111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2010073540288491111'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_06.html' title='Android 別のアクティビティを開く(戻り値を受け取らない）'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__ZiZX_sgyy4/TIR62MmBD6I/AAAAAAAABPg/yndLmQ5ls3A/s72-c/2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4225112358666991747</id><published>2010-09-05T17:11:00.001+09:00</published><updated>2010-09-05T17:26:08.827+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android プロジェクトに新しいアクティビティを追加する</title><content type='html'>プロジェクトに新しいアクティビティを追加します。&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;アクティビティを作成する&lt;/h1&gt;まずはアクティビティを作成します。&lt;br /&gt;プロジェクトを右クリックし「新規」→「その他」をクリックします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TINP0U2OqKI/AAAAAAAABOI/huSexlm4eAA/s1600/1-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TINP0U2OqKI/AAAAAAAABOI/huSexlm4eAA/s320/1-1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;新規ダイアログより「Java」フォルダから「クラス」を追加します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINP2pDbGpI/AAAAAAAABOQ/8N2YI_FDHtY/s1600/1-2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINP2pDbGpI/AAAAAAAABOQ/8N2YI_FDHtY/s320/1-2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;新規Javaクラスのダイアログでは以下を指定して「完了」ボタンを押します。&lt;br /&gt;名前：SubActivity&lt;br /&gt;スーパークラス：android.app.Activity&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINP42NaaJI/AAAAAAAABOY/kA4Jr6XN-wo/s1600/1-3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINP42NaaJI/AAAAAAAABOY/kA4Jr6XN-wo/s320/1-3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1 class="category"&gt;レイアウトを作成する&lt;/h1&gt;SubActivityが使用するレイアウトを作成します。&lt;br /&gt;res/layoutを右クリックし「新規」→「その他」をクリックします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TINQEU7jXoI/AAAAAAAABOg/QUHI41JW07k/s1600/2-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TINQEU7jXoI/AAAAAAAABOg/QUHI41JW07k/s320/2-1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;新規ダイアログより「Android」フォルダから「Android XML File」を追加します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINQGpjT8qI/AAAAAAAABOo/30ZguCg1guo/s1600/2-2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINQGpjT8qI/AAAAAAAABOo/30ZguCg1guo/s320/2-2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;New Android XML Fileダイアログでは以下を指定して「完了」ボタンを押します。&lt;br /&gt;ファイル名：sub.xml&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINQImQDyEI/AAAAAAAABOw/rdaLGyBhGPg/s1600/2-3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINQImQDyEI/AAAAAAAABOw/rdaLGyBhGPg/s320/2-3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1 class="category"&gt;マニフェストファイルにアクティビティを追加する&lt;/h1&gt;作成したアクティビティをマニフェストファイルに追加します。&lt;br /&gt;AndroidManifest.xmlを開き「アプリケーション」タブを開きます。&lt;br /&gt;「Application Nodes」の「追加」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TINUE1kZ8WI/AAAAAAAABPQ/sSAlycvvEFg/s1600/3-1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TINUE1kZ8WI/AAAAAAAABPQ/sSAlycvvEFg/s320/3-1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;次に表示されるダイアログから&lt;br /&gt;「Create a new element at the top level, in Application.」ラジオを選択し&lt;br /&gt;「Activity」を選択し「OK」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TINQVw6vQ9I/AAAAAAAABPA/G-1794-jTIA/s1600/3-2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TINQVw6vQ9I/AAAAAAAABPA/G-1794-jTIA/s320/3-2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;追加したActivityを選択し、右側のNameエディットボックスに作成した「.アクティビティの名称」を入力します。&lt;br /&gt;名称の前に「.」を入力するのを忘れないように&lt;br /&gt;またラベルに「@string/app_name」を入力するとアクティビティにアプリケーション名が表示されます。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINQYJTxRjI/AAAAAAAABPI/KkjppEwcxw8/s1600/3-3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TINQYJTxRjI/AAAAAAAABPI/KkjppEwcxw8/s320/3-3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;マニフェストファイルを保存します。&lt;br /&gt;&lt;br /&gt;「AndroidManifest.xml」タブを見るとactivityノードに新しく作成したアクティビティが追加されています。&lt;br /&gt;XMLを直接編集する方が楽かもしれません。&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;      package="my.study.android"&lt;br /&gt;      android:versionCode="1"&lt;br /&gt;      android:versionName="1.0"&amp;gt;&lt;br /&gt;&amp;lt;application android:icon="@drawable/icon" android:label="@string/app_name"&amp;gt;&lt;br /&gt;        &lt;br /&gt;&amp;lt;activity android:name=".MainActivity" android:label="@string/app_name"&amp;gt;&amp;lt;/activity&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;activity android:name=".SubActivity" android:label="@string/app_name"&amp;gt;&amp;lt;/activity&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/application&amp;gt;&lt;br /&gt;    &amp;lt;uses-sdk android:minSdkVersion="4" /&amp;gt;&lt;br /&gt;&amp;lt;/manifest&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4225112358666991747?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4225112358666991747/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4225112358666991747&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4225112358666991747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4225112358666991747'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_2905.html' title='Android プロジェクトに新しいアクティビティを追加する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TINP0U2OqKI/AAAAAAAABOI/huSexlm4eAA/s72-c/1-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-3148325097871831586</id><published>2010-09-05T12:51:00.004+09:00</published><updated>2010-09-05T14:11:54.871+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android 画面にラジオボタンを配置する</title><content type='html'>画面にラジオボタンを配置し、選択状態が変更したときにメッセージを表示します。&lt;br /&gt;&lt;br /&gt;main.xmlレイアウトを開き&lt;br /&gt;ラジオボタンをグループ化するためにレイアウトからRadioGroupを画面にドラッグドロップします。&lt;br /&gt;次にRadioGroupにRadioButtonを配置するのですが、右のアウトラインからRadioGroupを選択し「＋」でRadioButtonを追加します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIMT_bqpN-I/AAAAAAAABNo/_7299tKVjYM/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIMT_bqpN-I/AAAAAAAABNo/_7299tKVjYM/s320/1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout &lt;br /&gt;android:id="@+id/LinearLayout01" &lt;br /&gt;android:layout_width="fill_parent" &lt;br /&gt;android:layout_height="fill_parent" &lt;br /&gt;xmlns:android="http://schemas.android.com/apk/res/android" &lt;br /&gt;android:orientation="vertical"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;RadioGroup &lt;br /&gt;android:id="@+id/RadioGroup01" &lt;br /&gt;android:layout_width="wrap_content" &lt;br /&gt;android:layout_height="wrap_content"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;RadioButton &lt;br /&gt;android:id="@+id/RadioButton01" &lt;br /&gt;android:layout_width="wrap_content" &lt;br /&gt;android:layout_height="wrap_content" &lt;br /&gt;android:text="RadioButton01"&amp;gt;&lt;br /&gt;&amp;lt;/RadioButton&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;RadioButton &lt;br /&gt;android:id="@+id/RadioButton02" &lt;br /&gt;android:layout_width="wrap_content" &lt;br /&gt;android:layout_height="wrap_content" &lt;br /&gt;android:text="RadioButton02"&amp;gt;&lt;br /&gt;&amp;lt;/RadioButton&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/RadioGroup&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ラジオボタンの選択状態が変化したときの処理を追加します。&lt;br /&gt;&lt;br /&gt;まずはMainActivityクラスにandroid.widget.RadioGroup.OnCheckedChangeListenerインターフェースを実装する方法&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.RadioButton;&lt;br /&gt;import android.widget.RadioGroup;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;import android.widget.RadioGroup.OnCheckedChangeListener;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity implements OnCheckedChangeListener{&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //ラジオグループオブジェクトを取得する&lt;br /&gt;        RadioGroup rdg = (RadioGroup)findViewById(R.id.RadioGroup01);      &lt;br /&gt;        //ラジオボタンにイベントリスナーを設定する&lt;br /&gt;        rdg.setOnCheckedChangeListener(this); &lt;br /&gt;        //ラジオボタン１を選択状態にする&lt;br /&gt;        RadioButton rdo1 = (RadioButton)findViewById(R.id.RadioButton01);&lt;br /&gt;        rdo1.setChecked(true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCheckedChanged(RadioGroup rgoup, int id) {&lt;br /&gt;        RadioButton rdo = (RadioButton)findViewById(id);&lt;br /&gt;        Toast.makeText(this, "選択したラジオボタン:" + rdo.getText() , Toast.LENGTH_SHORT).show();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;次は無名クラスを使った方法&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.RadioButton;&lt;br /&gt;import android.widget.RadioGroup;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //ラジオグループオブジェクトを取得する&lt;br /&gt;        RadioGroup rdg = (RadioGroup)findViewById(R.id.RadioGroup01);      &lt;br /&gt;        //ラジオボタンにイベントリスナーを設定する&lt;br /&gt;        rdg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onCheckedChanged(RadioGroup group, int checkedId) {&lt;br /&gt;                RadioButton rdo = (RadioButton)findViewById(checkedId);&lt;br /&gt;                Toast.makeText(MainActivity.this, "選択したラジオボタン:" + rdo.getText() , Toast.LENGTH_SHORT).show();&lt;br /&gt;            }}); &lt;br /&gt;        //ラジオボタン１を選択状態にする&lt;br /&gt;        RadioButton rdo1 = (RadioButton)findViewById(R.id.RadioButton01);&lt;br /&gt;        rdo1.setChecked(true);&lt;br /&gt;     }    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;フィールドを利用した方法&lt;br /&gt;&lt;pre name="code" class="java"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.RadioButton;&lt;br /&gt;import android.widget.RadioGroup;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //ラジオグループオブジェクトを取得する&lt;br /&gt;        RadioGroup rdg = (RadioGroup)findViewById(R.id.RadioGroup01);      &lt;br /&gt;        //ラジオボタンにイベントリスナーを設定する&lt;br /&gt;        rdg.setOnCheckedChangeListener(RadioGroup01_OnCheckedChangeListener); &lt;br /&gt;        //ラジオボタン１を選択状態にする&lt;br /&gt;        RadioButton rdo1 = (RadioButton)findViewById(R.id.RadioButton01);&lt;br /&gt;        rdo1.setChecked(true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private RadioGroup.OnCheckedChangeListener RadioGroup01_OnCheckedChangeListener =&lt;br /&gt;     new RadioGroup.OnCheckedChangeListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onCheckedChanged(RadioGroup group, int checkedId) {&lt;br /&gt;                RadioButton rdo = (RadioButton)findViewById(checkedId);   &lt;br /&gt;                Toast.makeText(MainActivity.this, "選択したラジオボタン:" + rdo.getText() , Toast.LENGTH_SHORT).show(); &lt;br /&gt;            }&lt;br /&gt;        }; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIMVHE8D2UI/AAAAAAAABOA/jJuhlC1dlL0/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIMVHE8D2UI/AAAAAAAABOA/jJuhlC1dlL0/s320/2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-3148325097871831586?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/3148325097871831586/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=3148325097871831586&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3148325097871831586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3148325097871831586'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_3422.html' title='Android 画面にラジオボタンを配置する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__ZiZX_sgyy4/TIMT_bqpN-I/AAAAAAAABNo/_7299tKVjYM/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-2287324339287244386</id><published>2010-09-05T08:34:00.000+09:00</published><updated>2010-09-05T08:34:28.915+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android 簡単なメッセージを表示する。(Toast)</title><content type='html'>ちょっとしたメッセージをユーザーに通知するために「トースト」というものがあります。&lt;br /&gt;トーストは画面にメッセージを表示した後、一定時間後に勝手に消えてくれます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TILXcuel2LI/AAAAAAAABNY/RxZFOFp36bo/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TILXcuel2LI/AAAAAAAABNY/RxZFOFp36bo/s320/WS000000.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;Toast t = Toast.makeText(this, "表示するメッセージ", Toast.LENGTH_SHORT);&lt;br /&gt;t.show();&lt;br /&gt;または&lt;br /&gt;Toast.makeText(this, "表示するメッセージ", Toast.LENGTH_SHORT).show();&lt;br /&gt;&lt;/pre&gt;ToastクラスのmakeText()メソッド&lt;br /&gt;第1引数は、表示するContextを指定します。通常はthisを指定します。&lt;br /&gt;第2引数は、表示するメッセージ。&lt;br /&gt;第3引数は、表示する時間。Toast.LENGTH_SHORT(短時間)またはToast.LENGTH_LONG(長時間)を指定します。&lt;br /&gt;Toastクラスのshow()メソッドでメッセージを表示します。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //簡単なメッセージを表示する&lt;br /&gt;        Toast.makeText(this, "ﾁｮｯﾄしたメッセージ", Toast.LENGTH_SHORT).show();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-2287324339287244386?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/2287324339287244386/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=2287324339287244386&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2287324339287244386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2287324339287244386'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-toast.html' title='Android 簡単なメッセージを表示する。(Toast)'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__ZiZX_sgyy4/TILXcuel2LI/AAAAAAAABNY/RxZFOFp36bo/s72-c/WS000000.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-6905474679756532429</id><published>2010-09-05T06:57:00.005+09:00</published><updated>2010-09-05T14:02:29.280+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android 画面にチェックボックスを配置する</title><content type='html'>画面にチェックボックスを配置し、チェック状態が変更したときにチェックボックスのテキストを変更してみます。&lt;br /&gt;&lt;br /&gt;main.xmlレイアウトを開きCheckBoxを画面にドラッグドロップします。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TILAnlDSOlI/AAAAAAAABNQ/QwvJta5RMXk/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TILAnlDSOlI/AAAAAAAABNQ/QwvJta5RMXk/s320/1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;CheckBoxのTextプロパティを空にします。&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;checkbox &lt;br /&gt;    android:id="@+id/CheckBox01" &lt;br /&gt;    android:layout_height="wrap_content"&lt;br /&gt;    android:layout_width="wrap_content"&amp;gt;&lt;br /&gt;&amp;lt;/checkbox&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;チェックボックスのチェック状態の変化したときの処理を追加します。&lt;br /&gt;&lt;br /&gt;まずはMainActivityクラスにandroid.widget.CompoundButton.OnCheckedChangeListenerインターフェースを実装する方法&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.CheckBox;&lt;br /&gt;import android.widget.CompoundButton;&lt;br /&gt;import android.widget.CompoundButton.OnCheckedChangeListener;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity implements OnCheckedChangeListener{&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //チェックボックスオブジェクトを取得する&lt;br /&gt;        CheckBox chk = (CheckBox)findViewById(R.id.CheckBox01);&lt;br /&gt;        //チェックボックスをチェックONにする&lt;br /&gt;        chk.setChecked(true);&lt;br /&gt;        //チェックボックスにイベントリスナーを設定する&lt;br /&gt;        chk.setOnCheckedChangeListener(this);  &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCheckedChanged(CompoundButton cb, boolean isChecked) {&lt;br /&gt;        switch(cb.getId()) {&lt;br /&gt;        case R.id.CheckBox01:&lt;br /&gt;            cb.setText("Checked:" + isChecked); &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;次は無名クラスを使った方法&lt;br /&gt;&lt;pre class="java" name="code"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.CheckBox;&lt;br /&gt;import android.widget.CompoundButton;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //チェックボックスオブジェクトを取得する&lt;br /&gt;        CheckBox chk = (CheckBox)findViewById(R.id.CheckBox01);&lt;br /&gt;        //チェックボックスをチェックONにする&lt;br /&gt;        chk.setChecked(true);&lt;br /&gt;        //チェックボックスにイベントリスナーを設定する&lt;br /&gt;        chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {&lt;br /&gt;                buttonView.setText("Checked2:" + isChecked);  &lt;br /&gt;            }&lt;br /&gt;        });    &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;フィールドを利用した方法&lt;br /&gt;&lt;pre name="code" class="java"&gt;package my.study.android;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.CheckBox;&lt;br /&gt;import android.widget.CompoundButton;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.main);&lt;br /&gt;        //チェックボックスオブジェクトを取得する&lt;br /&gt;        CheckBox chk = (CheckBox)findViewById(R.id.CheckBox01);&lt;br /&gt;        //チェックボックスをチェックONにする&lt;br /&gt;        chk.setChecked(true);&lt;br /&gt;        //チェックボックスにイベントリスナーを設定する&lt;br /&gt;        chk.setOnCheckedChangeListener(CheckBox01_OnCheckedChangeListener);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private CompoundButton.OnCheckedChangeListener CheckBox01_OnCheckedChangeListener = &lt;br /&gt;        new CompoundButton.OnCheckedChangeListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {&lt;br /&gt;                buttonView.setText("Checked2:" + isChecked);     &lt;br /&gt;           }&lt;br /&gt;        };&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TILaPBn57RI/AAAAAAAABNg/xe7tjBUTvVo/s1600/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TILaPBn57RI/AAAAAAAABNg/xe7tjBUTvVo/s320/WS000000.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-6905474679756532429?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/6905474679756532429/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=6905474679756532429&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6905474679756532429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6905474679756532429'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_05.html' title='Android 画面にチェックボックスを配置する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TILAnlDSOlI/AAAAAAAABNQ/QwvJta5RMXk/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4318071262852375125</id><published>2010-09-04T18:01:00.008+09:00</published><updated>2010-09-05T13:45:11.777+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android 画面にボタンを配置する</title><content type='html'>画面にボタンを配置し、クリック時に画面を終了するようにします。&lt;br /&gt;&lt;br /&gt;まずパッケージエクスプローラでlayoutフォルダのmain.xml開きます。&lt;br /&gt;「レイアウト」タブで画面イメージが表示されますので、ボタンをドラッグドロップします。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIIHTeZV1PI/AAAAAAAABMg/fA-R2jzCexc/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIIHTeZV1PI/AAAAAAAABMg/fA-R2jzCexc/s320/1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;配置したボタンを選択し、プロパティウィンドウからTextプロパティとIdプロパティを変更します。&lt;br /&gt;Textプロパティは、ボタンに表示する文字列。&lt;br /&gt;Idプロパティは、オブジェクトの識別名です。&lt;br /&gt;プロパティウィンドウが表示されていない場合は、&lt;br /&gt;Eclipseメニュー「ウィンドウ」→「ビューの表示」→「プロパティ」をクリックします。&lt;br /&gt;&lt;br /&gt;まずIdプロパティを「@+id/button_close」に変更します。&lt;br /&gt;次にTextプロパティですが、表示する文字列をリソースファイルで管理するので&lt;br /&gt;プロパティウィンドウのTextプロパティの値列に表示される「…」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIIMdkrnDmI/AAAAAAAABNI/ABAf8Zyvj80/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIIMdkrnDmI/AAAAAAAABNI/ABAf8Zyvj80/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Resource Chooserダイアログが表示されるので「New String…」ボタンを押します。&lt;br /&gt;次に表示されるCreate New Android Stringダイアログに以下を入力し「OK」ボタンを押します。&lt;br /&gt;&lt;br /&gt;ストリング：終了&lt;br /&gt;New R.String：button_close&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIIIEACVYrI/AAAAAAAABM4/T1trK4bzSVQ/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIIIEACVYrI/AAAAAAAABM4/T1trK4bzSVQ/s320/3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Resource Chooserダイアログから先ほど登録した「button_close」を選択し「OK」ボタンを押します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIIHztSRyyI/AAAAAAAABMw/J_EirzLZ0q0/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIIHztSRyyI/AAAAAAAABMw/J_EirzLZ0q0/s320/4.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;リソースに追加した文字列はパッケージ・エクスプローラーのres/values/string.xmlで管理されています。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIIIMjRMKdI/AAAAAAAABNA/oPauWbbxwzA/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIIIMjRMKdI/AAAAAAAABNA/oPauWbbxwzA/s320/5.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;それではボタンを押したときの処理を追加します。&lt;br /&gt;方法はいくつかあります。&lt;br /&gt;&lt;br /&gt;まずはHelloWorldアクティビティにandroid.view.View.OnClickListenerインターフェースを実装する方法&lt;br /&gt;&lt;pre class="java" name="code"&gt;package yan.android.helloworld;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.*;&lt;br /&gt;&lt;br /&gt;public class HelloWorld extends Activity implements OnClickListener{&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //アクティビティに対しmain.xmlに定義されているレイアウトを適用する。&lt;br /&gt;        setContentView(R.layout.main); &lt;br /&gt;        //ボタンに対してイベントリスナを設定する。&lt;br /&gt;        Button button_close = (Button)findViewById(R.id.button_close );&lt;br /&gt;       button_close.setOnClickListener(this);&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onClick(View v) {&lt;br /&gt;        switch(v.getId()) {        &lt;br /&gt;        case R.id.button_close: &lt;br /&gt;            //終了ボタン：アクティビティの終了&lt;br /&gt;             finish();&lt;br /&gt;            break;        &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;次は無名クラスを使った方法&lt;br /&gt;&lt;pre class="java" name="code"&gt;package yan.android.helloworld;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.*;&lt;br /&gt;&lt;br /&gt;public class HelloWorld extends Activity {&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //アクティビティに対しmain.xmlに定義されているレイアウトを適用する。&lt;br /&gt;        setContentView(R.layout.main); &lt;br /&gt;        //ボタンに対してイベントリスナを設定する。&lt;br /&gt;        Button button_close = (Button)findViewById(R.id.button_close );&lt;br /&gt;        button_close.setOnClickListener(new View.OnClickListener(){&lt;br /&gt;            @Override&lt;br /&gt;            public void onClick(View v) {&lt;br /&gt;                finish();    &lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;フィールドを利用した方法&lt;br /&gt;&lt;pre name="code" class="java"&gt;package yan.android.helloworld;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.*;&lt;br /&gt;&lt;br /&gt;public class HelloWorld extends Activity {&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        //アクティビティに対しmain.xmlに定義されているレイアウトを適用する。&lt;br /&gt;        setContentView(R.layout.main); &lt;br /&gt;        //ボタンに対してイベントリスナを設定する。&lt;br /&gt;        Button button_close = (Button)findViewById(R.id.button_close );&lt;br /&gt;        button_close.setOnClickListener(button_close_ClickListener);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    private View.OnClickListener button_close_ClickListener = new View.OnClickListener(){&lt;br /&gt;        @Override&lt;br /&gt;        public void onClick(View v) {&lt;br /&gt;            finish();&lt;br /&gt;        }};&lt;br /&gt;        &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4318071262852375125?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4318071262852375125/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4318071262852375125&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4318071262852375125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4318071262852375125'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_8041.html' title='Android 画面にボタンを配置する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/TIIHTeZV1PI/AAAAAAAABMg/fA-R2jzCexc/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-1091710909638805642</id><published>2010-09-04T14:35:00.003+09:00</published><updated>2010-09-04T16:47:58.431+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android アクティビティとは？</title><content type='html'>自動生成されたHelleWorld.javaのコードです。&lt;br /&gt;&lt;pre name="code" class="java"&gt;package yan.android.helloworld;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;&lt;br /&gt;public class HelloWorld extends Activity {&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;         setContentView(R.layout.main);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;HelloWorldクラスはActivityクラスを継承しています。&lt;br /&gt;Activityとは、"Androidアプリの画面”に相当します。&lt;br /&gt;onCreateメソッドは画面が起動されると呼び出されるメソッドです。&lt;br /&gt;&lt;br /&gt;他にも画面が終了したとき、バックグランドに移動したとき、画面を回転させた時などに呼び出されるメソッドがあります。&lt;br /&gt;これらを確認するために、下記のメソッドをオーバーライドしてみます。&lt;br /&gt;&lt;br /&gt;Eclipseのメニュー「ソース」→「メソッドのオーバーライド/実装」を選択し&lt;br /&gt;これらのメソッドをチェックONにします&lt;br /&gt;onCreate&lt;br /&gt;onStart&lt;br /&gt;onResume&lt;br /&gt;onPause&lt;br /&gt;onStop&lt;br /&gt;onDestroy&lt;br /&gt;&lt;br /&gt;各メソッドはメソッド名を表示するコードを書きます。&lt;br /&gt;Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show();&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;package yan.android.helloworld;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.Toast;&lt;br /&gt;&lt;br /&gt;public class HelloWorld extends Activity {&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT ).show();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onDestroy() {&lt;br /&gt;  // TODO 自動生成されたメソッド・スタブ&lt;br /&gt;  super.onDestroy();&lt;br /&gt;        Toast.makeText(this, "onDestroy", Toast.LENGTH_SHORT ).show();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onPause() {&lt;br /&gt;  // TODO 自動生成されたメソッド・スタブ&lt;br /&gt;  super.onPause();&lt;br /&gt;        Toast.makeText(this, "onPause", Toast.LENGTH_SHORT ).show();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onRestart() {&lt;br /&gt;  // TODO 自動生成されたメソッド・スタブ&lt;br /&gt;  super.onRestart();&lt;br /&gt;        Toast.makeText(this, "onRestart", Toast.LENGTH_SHORT ).show();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onResume() {&lt;br /&gt;  // TODO 自動生成されたメソッド・スタブ&lt;br /&gt;  super.onResume();&lt;br /&gt;        Toast.makeText(this, "onResume", Toast.LENGTH_SHORT ).show();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onStart() {&lt;br /&gt;  // TODO 自動生成されたメソッド・スタブ&lt;br /&gt;  super.onStart();&lt;br /&gt;        Toast.makeText(this, "onStart", Toast.LENGTH_SHORT ).show();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onStop() {&lt;br /&gt;  // TODO 自動生成されたメソッド・スタブ&lt;br /&gt;  super.onStop();&lt;br /&gt;        Toast.makeText(this, "onStop", Toast.LENGTH_SHORT ).show();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;アプリを実行するとonCreate、onStart、onResumeの順番に表示されます。&lt;br /&gt;&lt;br /&gt;ここでホームボタンを押して待ち受け画面になり、onPause、onStopが表示されます。&lt;br /&gt;&lt;br /&gt;アプリを再度表示するとonRestart、onStart、onResume、(onDestroy）が表示されます。&lt;br /&gt;&lt;br /&gt;このようにActivityには色々な状態があります。&lt;br /&gt;onCreate()・・・アクティビティの生成時に呼ばれる&lt;br /&gt;onStart()・・・アクティビティの表示が開始されたときに呼ばれる&lt;br /&gt;onRestart()・・・停止状態からの表示再開に遷移するときに呼ばれる&lt;br /&gt;onResume()・・・ユーザの操作受付を開始したときに呼ばれる&lt;br /&gt;onPause()・・・ユーザの操作受付を中断したときに呼ばれる&lt;br /&gt;onStop()・・・アクティビティの票ぞを中断したときに呼ばれる&lt;br /&gt;onDestroy()・・・アクティビティが破棄されたときに呼ばれる&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-1091710909638805642?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/1091710909638805642/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=1091710909638805642&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1091710909638805642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1091710909638805642'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_04.html' title='Android アクティビティとは？'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-6832709348014379912</id><published>2010-09-03T22:21:00.000+09:00</published><updated>2010-09-03T22:21:20.569+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android エミュレータの日本語化</title><content type='html'>エミュレータを起動し「ホーム」ボタンを押して待ち受け画面を表示します。&lt;br /&gt;「menu」ボタンを押し、画面下部に表示される「Settings」ボタンを押します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TID2FArxucI/AAAAAAAABMI/HCMp2po25ik/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TID2FArxucI/AAAAAAAABMI/HCMp2po25ik/s320/1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;設定の一覧が表示されるので「Locale ＆Text」をクリックします。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TID2LF_dXBI/AAAAAAAABMQ/yFrz9t2Oaz0/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TID2LF_dXBI/AAAAAAAABMQ/yFrz9t2Oaz0/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「Select Locale」をクリックし、開いた画面から「Japanese」をクリックします。&lt;br /&gt;「谷歌・・・」がチェックONであればOFFにします。&lt;br /&gt;「Japanese IME」をチェックONにします。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TID2RiDMD6I/AAAAAAAABMY/5-qyIUCFYBA/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TID2RiDMD6I/AAAAAAAABMY/5-qyIUCFYBA/s320/3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;これでエミューレータが日本語表示になります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-6832709348014379912?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/6832709348014379912/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=6832709348014379912&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6832709348014379912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6832709348014379912'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android_03.html' title='Android エミュレータの日本語化'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__ZiZX_sgyy4/TID2FArxucI/AAAAAAAABMI/HCMp2po25ik/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8847263108046616999</id><published>2010-09-03T17:48:00.001+09:00</published><updated>2010-09-03T17:53:04.520+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android HelloWorldを表示してみる</title><content type='html'>Eclipseを起動しメニューより「ファイル」→「新規」→「プロジェクト」を選択します。&lt;br /&gt;「Androidプロジェクト」を選択し、「次へ」ボタンをクリックします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIC1Y2orS1I/AAAAAAAABLQ/sf8rJZnuCvw/s1600/1.BMP" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIC1Y2orS1I/AAAAAAAABLQ/sf8rJZnuCvw/s320/1.BMP" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;新規Androidプロジェクトダイアログが表示されるので以下の項目を設定します。&lt;br /&gt;&lt;br /&gt;プロジェクト名：プロジェクトの名前（ここではAndroid)&lt;br /&gt;ビルド・ターゲット：Androidのバージョン（ここではAndroid1.6)&lt;br /&gt;アプリケーション名：タイトルに表示するアプリケーションの名称（ここではHelloWorld)&lt;br /&gt;&lt;br /&gt;パッケージ名：クラス名の衝突をさけるための名前空間（ここではyan.android.helloworld)&lt;br /&gt;Create Activity：プラグインによって生成されるアクティビティクラスの名前（ここではHelloWorld)&lt;br /&gt;Min SDK Version：アプリケーションが最低限動作保証するSDKのターゲットID。&lt;br /&gt;※Android1.6の場合は4、Android2.1の場合は7。&lt;br /&gt;ビルド・ターゲットで選択した「API Level」を指定します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIC1jiN_H9I/AAAAAAAABLY/SSllQaz9WSM/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIC1jiN_H9I/AAAAAAAABLY/SSllQaz9WSM/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「Create Activity」で指定したアクティビティ名が付いた、Helloアクティビティ名.java(ここではHelloWorld.java)が自動生成されています。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIC1uPu97yI/AAAAAAAABLg/L-D1ZBocLkk/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIC1uPu97yI/AAAAAAAABLg/L-D1ZBocLkk/s320/3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;自動生成されているHelloWorld.javaを実行してみます。&lt;br /&gt;Eclipseの「実行」メニューより「実行」を選択します。&lt;br /&gt;開いたダイアログより「Androidアプリケーション」を選択し「OK」ボタンを押します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIC1y1hJ_AI/AAAAAAAABLo/lq4BdzVxKUU/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIC1y1hJ_AI/AAAAAAAABLo/lq4BdzVxKUU/s320/4.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;エミュレータが起動します。&lt;br /&gt;スクリーンがロックされているので「Menu」ボタンで解除します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIC16SxG6SI/AAAAAAAABLw/EHNgpje1qaY/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIC16SxG6SI/AAAAAAAABLw/EHNgpje1qaY/s320/5.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;続いて「Sorry! Process android-process.media is not responding.」と表示された場合は「Force Close」をクリックします。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIC2EkYswII/AAAAAAAABL4/Xol8V-HFC5E/s1600/6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIC2EkYswII/AAAAAAAABL4/Xol8V-HFC5E/s320/6.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;エミュレータの起動に時間がかかるので、しばらく待ちます。&lt;br /&gt;やっと「Hello World」が表示されました。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIC2SWh8dgI/AAAAAAAABMA/j1OZ304f4-0/s1600/7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIC2SWh8dgI/AAAAAAAABMA/j1OZ304f4-0/s320/7.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;エミュレータの起動が遅いなぁ・・・&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8847263108046616999?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8847263108046616999/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8847263108046616999&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8847263108046616999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8847263108046616999'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android-helloworld.html' title='Android HelloWorldを表示してみる'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ZiZX_sgyy4/TIC1Y2orS1I/AAAAAAAABLQ/sf8rJZnuCvw/s72-c/1.BMP' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8442800568679330286</id><published>2010-09-03T11:42:00.004+09:00</published><updated>2010-09-03T14:57:04.655+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android 開発環境を作る</title><content type='html'>Androidアプリを開発するための環境を作ります。&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;Java Development Kit(JDK)のインストール&lt;/h1&gt;まずJavaをインストールします。&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2009/04/jdk.html"&gt;Java　JDKのダウンロードとインストール &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;Eclipseのインストール&lt;/h1&gt;次にEclipseをインストールします。&lt;br /&gt;&lt;a href="http://yan-note.blogspot.com/2009/04/eclips-34.html"&gt;Java　Eclips 3.4のダウンロードおよびインストールと日本語化 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;Android Devlopment Tools(ADT)のインストール&lt;/h1&gt;Android Devlopment Tools(ADT)をインストールします。&lt;br /&gt;ADTはExlipseにAndroidアプリの開発機能を追加するためのプラグインです。&lt;br /&gt;Eclipseからインストールします。&lt;br /&gt;&lt;br /&gt;まずEclipseを起動しメニューから「ヘルプ」→「ソフトウェアの更新」を選択します。&lt;br /&gt;「ソフトウェアの更新およびアドオン」ダイアログより「サイトの追加」ボタンをクリックします。&lt;br /&gt;「サイトの追加」ダイアログのロケーションに「https://dl-ssl.google.com/android/eclipse/」を入力し「OK」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBfSs3NYZI/AAAAAAAABJo/-eaPnpqDxKI/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBfSs3NYZI/AAAAAAAABJo/-eaPnpqDxKI/s320/1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;指定したプラグインが「使用可能なソフトウェア」タブに追加されるので「Developer Tools」をチェックして、「サイトの追加」を押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIBfY52WT9I/AAAAAAAABJw/-sENHPAk15k/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIBfY52WT9I/AAAAAAAABJw/-sENHPAk15k/s320/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストールする項目を確認し、「次へ」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBfd_FUWDI/AAAAAAAABJ4/iyjbcqkdgu4/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBfd_FUWDI/AAAAAAAABJ4/iyjbcqkdgu4/s320/3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;使用条件を読み同意する場合は「使用条件の条項に同意します」を選択し、「完了」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIBfj8RV5_I/AAAAAAAABKA/YBi8lXd6a4s/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIBfj8RV5_I/AAAAAAAABKA/YBi8lXd6a4s/s320/4.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;インストールが終了するとEclipseの再起動が促されるので、再起動を行います。&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;Android SDKのインストール&lt;/h1&gt;&lt;br /&gt;Android SDKをダウンロードします。&lt;br /&gt;&lt;a href="http://developer.android.com/sdk/index.html"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt;&lt;br /&gt;Windowsは「android-sdk-r06-windows.zip」を適当なフォルダにダウンロードします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIBfqV8MM4I/AAAAAAAABKI/XL9PJehWshs/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIBfqV8MM4I/AAAAAAAABKI/XL9PJehWshs/s320/5.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ダウンロードしたzipを解凍し適当なフォルダに配置します。&lt;br /&gt;（ここではC:/Androidに配置しました。）&lt;br /&gt;&lt;br /&gt;Eclipseを起動しメニューから「ウィンドウ」→「設定」を選択します。&lt;br /&gt;設定ダイアログの左のツリーから「Android」を選択し、&lt;br /&gt;右側のSDKロケーションに、Android SDKを配置したフォルダを指定し「OK」ボタンを押します。&lt;br /&gt;（ここではC:\Android\android-sdk-windows)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBfv6W03lI/AAAAAAAABKQ/zLAOsLqlmZs/s1600/6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBfv6W03lI/AAAAAAAABKQ/zLAOsLqlmZs/s320/6.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;次にAndroid SDKのライブラリのインストールを行います。&lt;/b&gt;&lt;br /&gt;Eclipseを起動しメニューから「ウィンドウ」→「Android SDK and AVD Manager」を選択します。&lt;br /&gt;Android SDK and AVD Managerダイアログの左のメニューから「Available Packages」を選択します。&lt;br /&gt;右側の「https://dl-ssl.google.com/android/repository/repository.xml」をチェックONし&lt;br /&gt;「Install Selected」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBf1lsZosI/AAAAAAAABKY/4Bck2PX0BF8/s1600/7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBf1lsZosI/AAAAAAAABKY/4Bck2PX0BF8/s320/7.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Choose Packages to Installダイアログで「Accept All」ラジオを選択し「インストール」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIBf7Gb-miI/AAAAAAAABKg/ZtOZFLGUD7g/s1600/8.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/TIBf7Gb-miI/AAAAAAAABKg/ZtOZFLGUD7g/s320/8.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;コマンドライン用のパスの設定を行います。&lt;/b&gt;&lt;br /&gt;SDKをインストールしたフォルダ（C:\Android\android-sdk-windows)のtoolsフォルダにはコマンドラインで利用するためのコマンドが含まれています。&lt;br /&gt;毎回パスを指定するのは面倒なので環境変数にパスを追加します。&lt;br /&gt;&lt;br /&gt;「コントロールパネル」→「システム」→「システムの詳細設定」をクリックします。&lt;br /&gt;「詳細設定」タブの「環境変数」ボタンをクリックします。&lt;br /&gt;システム環境変数の「Path」を選択し「編集」ボタンを押します。&lt;br /&gt;（なければ「新規」ボタンを押します。）&lt;br /&gt;環境変数の編集ダイアログに表示されるパスの最後を「;」で区切り「SDKをインストルしたフォルダ\tools」を追加します。（ここではC:\Android\android-sdk-windows\tools）&lt;br /&gt;&lt;br /&gt;コマンドプロンプトを立ち上げて「adb help」と入力します。&lt;br /&gt;パスが通っていればコマンドオプションなどに関するヘルプが表示されます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1 class="category"&gt;Android Virtual Device(AVD)の追加&lt;/h1&gt;Eclipseからエミュレータでデバッグを行うために、エミュレータに端末の設定を追加します。&lt;br /&gt;&lt;br /&gt;Eclipseを起動しメニューから「ウィンドウ」→「Android SDK and AVD Manager」を選択します。&lt;br /&gt;Android SDK and AVD Managerダイアログの左のメニューから「Virtual Devices」を選択し「追加」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIBgCMdA5CI/AAAAAAAABKo/tNE3yl3VbVs/s1600/9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIBgCMdA5CI/AAAAAAAABKo/tNE3yl3VbVs/s320/9.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Xperia用のエミュレータの設定を行います。&lt;br /&gt;名前:Xperia&lt;br /&gt;ターゲット:Android 1.6 - API Level 4&lt;br /&gt;SD Card: サイズ 64Mb&lt;br /&gt;Skin:WVGA854(480×854)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIBgHpVuyII/AAAAAAAABKw/-Q4Ph1tTjnk/s1600/10.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TIBgHpVuyII/AAAAAAAABKw/-Q4Ph1tTjnk/s320/10.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;エミュレータが起動するか確認します。&lt;br /&gt;Eclipseを起動しメニューから「ウィンドウ」→「Android SDK and AVD Manager」を選択します。&lt;br /&gt;Android SDK and AVD Managerダイアログの左のメニューから「Virtual Devices」を選択し&lt;br /&gt;右側より先ほど追加した「Xperia」を選択し「開始」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIBgN3WyIKI/AAAAAAAABK4/b81TMxHG2LQ/s1600/11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIBgN3WyIKI/AAAAAAAABK4/b81TMxHG2LQ/s320/11.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Lunch Optionsダイアログの「起動」ボタンを押します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIBgT2Qa9RI/AAAAAAAABLA/9Qp0i4vX9fA/s1600/12.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TIBgT2Qa9RI/AAAAAAAABLA/9Qp0i4vX9fA/s320/12.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;エミュレータが起動すれば成功です。&lt;br /&gt;エミュレータが起動するまで少し時間がかかります。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBgbIPTQ5I/AAAAAAAABLI/Q23uIPF7FiU/s1600/13.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBgbIPTQ5I/AAAAAAAABLI/Q23uIPF7FiU/s320/13.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8442800568679330286?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8442800568679330286/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8442800568679330286&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8442800568679330286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8442800568679330286'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/09/android.html' title='Android 開発環境を作る'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/__ZiZX_sgyy4/TIBfSs3NYZI/AAAAAAAABJo/-eaPnpqDxKI/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-5559771464532297827</id><published>2010-08-30T20:53:00.002+09:00</published><updated>2010-08-30T20:55:46.955+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　MDI子フォームにToolTipコントロールをプログラムで動的に配置するとメモリーリークが発生する。</title><content type='html'>おもいっきりハマったYo｡･ﾟ･(ﾉД`)･ﾟ･｡&lt;br /&gt;&lt;br /&gt;ある画面を開いたり閉じたりしているとOutOfMemoryExceptionが発生します。&lt;br /&gt;タスクマネージャで確認するとGDIオブジェクトの数がどんどん増加していき&lt;br /&gt;1万ちょうどでOutOfMemoryExceptionが発生しました。&lt;br /&gt;&lt;br /&gt;原因はMDI子フォームにToolTipコントロールをプログラムで動的に配置するとメモリーリークが発生するそうです。&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/817795/ja"&gt;http://support.microsoft.com/kb/817795/ja&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ver1.1で修正されたのに、Ver2.0で復活したようです。&lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/cb1688ae-2156-4713-92d0-fc3454fc1f49"&gt;http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/cb1688ae-2156-4713-92d0-fc3454fc1f49&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ToolTipコントロールをプログラムで動的に配置した場合は、&lt;br /&gt;Disposeで開放するかComponentsに追加するようにします。&lt;br /&gt;デザイナで配置した場合はComponentsに追加されるので問題ありません。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-5559771464532297827?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/5559771464532297827/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=5559771464532297827&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5559771464532297827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5559771464532297827'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/08/netmditooltip.html' title='.NET　MDI子フォームにToolTipコントロールをプログラムで動的に配置するとメモリーリークが発生する。'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-7465803146489992848</id><published>2010-08-18T13:54:00.002+09:00</published><updated>2010-08-18T13:54:46.226+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　TextBoxの枠線の色を変えるには</title><content type='html'>TextBoxの枠線の色を変えるサンプルです。&lt;br /&gt;BorderStyleプロパティがWindows.Forms.BorderStyle.FixedSingleの場合のみ枠線の色を変えます。&lt;br /&gt;&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Imports System.ComponentModel&lt;br /&gt;&lt;br /&gt;Public Class CsTextBox&lt;br /&gt;    Inherits System.Windows.Forms.TextBox&lt;br /&gt;&lt;br /&gt;    Private _BorderColor As Color = System.Drawing.SystemColors.ControlText&lt;br /&gt;&lt;br /&gt;    &amp;lt;EditorBrowsable(EditorBrowsableState.Always), Browsable(True), _&lt;br /&gt;      DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), _&lt;br /&gt;      DefaultValue(GetType(Color), "ControlText"), Category("カスタム"), _&lt;br /&gt;      Description("境界線の色です。BorderStyleプロパティがWindows.Forms.BorderStyle.FixedSingleの場合のみ有効です。")&amp;gt; _&lt;br /&gt;      Public Property BorderColor() As Color&lt;br /&gt;        Get&lt;br /&gt;            Return Me._BorderColor&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal value As Color)&lt;br /&gt;            Me._BorderColor = value&lt;br /&gt;            Me.Invalidate()&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;    Private Const WM_PAINT As Integer = &amp;HF&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)&lt;br /&gt;        Select Case m.Msg&lt;br /&gt;            Case WM_PAINT&lt;br /&gt;                MyBase.WndProc(m)&lt;br /&gt;                Call DrawRectangle()&lt;br /&gt;&lt;br /&gt;            Case Else&lt;br /&gt;                MyBase.WndProc(m)&lt;br /&gt;&lt;br /&gt;        End Select&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Protected Overridable Sub DrawRectangle()&lt;br /&gt;        If Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle Then&lt;br /&gt;            Dim g As Graphics = Me.CreateGraphics()&lt;br /&gt;            Dim rect As Rectangle = Me.ClientRectangle&lt;br /&gt;            Dim LinePen As New Pen(Me.BorderColor)&lt;br /&gt;            Try&lt;br /&gt;                g.DrawRectangle(LinePen, rect.X, rect.Y, rect.Width - 1, rect.Height - 1)&lt;br /&gt;            Finally&lt;br /&gt;                LinePen.Dispose()&lt;br /&gt;            End Try&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-7465803146489992848?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/7465803146489992848/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=7465803146489992848&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/7465803146489992848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/7465803146489992848'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/08/nettextbox.html' title='.NET　TextBoxの枠線の色を変えるには'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-2211146759538478516</id><published>2010-08-17T14:11:00.005+09:00</published><updated>2010-08-17T16:55:32.468+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　右クリックメニューを表示したコントロールを取得する</title><content type='html'>右クリックメニューを表示するには&lt;br /&gt;.NET Framework 1.1以前はContextMenuクラスを使用します。&lt;br /&gt;.NET Framework 2.0からはContextMenuStripクラスを使用します。&lt;br /&gt;&lt;br /&gt;右クリックメニューを表示したコントロールを取得するには&lt;br /&gt;ToolStripMenuItemのOwnerプロパティよりContextMenuStripを取得し、&lt;br /&gt;ContextMenuStripのSourceControlプロパティより取得できます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Public Class Form1&lt;br /&gt;&lt;br /&gt;    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _&lt;br /&gt;    Handles Me.Load&lt;br /&gt;        Dim lbl As New Label&lt;br /&gt;        lbl.Name = "Label1"&lt;br /&gt;        lbl.Text = lbl.Name&lt;br /&gt;        lbl.Location = New Point(10, 10)&lt;br /&gt;        Me.Controls.Add(lbl)&lt;br /&gt;&lt;br /&gt;        Dim cms As New System.Windows.Forms.ContextMenuStrip&lt;br /&gt;        cms.Items.Add("テスト(&amp;amp;T)", Nothing, AddressOf ContextMenuItem_Clicked)&lt;br /&gt;        lbl.ContextMenuStrip = cms&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub ContextMenuItem_Clicked(ByVal sender As Object, ByVal e As System.EventArgs)&lt;br /&gt;        Dim tsi As ToolStripMenuItem = DirectCast(sender, ToolStripMenuItem)&lt;br /&gt;        Dim cms As ContextMenuStrip = DirectCast(tsi.Owner, ContextMenuStrip)&lt;br /&gt;        Dim ctrl As Control = cms.SourceControl&lt;br /&gt;        Console.WriteLine(ctrl.Name)&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-2211146759538478516?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/2211146759538478516/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=2211146759538478516&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2211146759538478516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/2211146759538478516'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/08/net.html' title='.NET　右クリックメニューを表示したコントロールを取得する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-5034610970075004356</id><published>2010-07-23T10:46:00.004+09:00</published><updated>2010-08-17T16:55:59.959+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　振り仮名を取得する</title><content type='html'>入力した文字列より振り仮名を取得するカスタムテキストボックスのサンプルです。&lt;br /&gt;カスタムテキストボックスはImeが確定するとフリガナを取得し、KanaCommitedイベントを発生します。&lt;br /&gt;フリガナは半角カナと数字のみを取り出します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CustomTextBox1スに入力した文字列より振り仮名を取得し、&lt;br /&gt;TextBox1に表示します。&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Public Class Form1&lt;br /&gt;&lt;br /&gt;    Private Sub CustomTextBox1_KanaCommitted(ByVal e As KanaEventArgs) _&lt;br /&gt;    Handles CustomTextBox1.KanaCommitted&lt;br /&gt;        If e.Cancel Then&lt;br /&gt;            Me.TextBox1.Text = String.Empty&lt;br /&gt;        Else&lt;br /&gt;            Me.TextBox1.Text = Me.TextBox1.Text &amp;amp; e.Kana&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;    &lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;カスタムテキストボックスです。&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Imports System.Runtime.InteropServices&lt;br /&gt;&lt;br /&gt;Public Class CustomTextBox&lt;br /&gt;    Inherits System.Windows.Forms.TextBox&lt;br /&gt;&lt;br /&gt;    '-----API定義-----&lt;br /&gt;&lt;br /&gt;    Private Const WM_IME_COMPOSITION As Integer = &amp;amp;H10F&lt;br /&gt;    Private Const WM_CHAR As Integer = &amp;amp;H102&lt;br /&gt;&lt;br /&gt;    Private Const GCS_RESULTREADSTR As Integer = &amp;amp;H200&lt;br /&gt;&lt;br /&gt;    &amp;lt;DllImport("Imm32.dll", CharSet:=CharSet.Ansi)&amp;gt; _&lt;br /&gt;    Private Shared Function ImmGetContext(ByVal hWnd As IntPtr) As IntPtr&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    &amp;lt;DllImport("Imm32.dll", CharSet:=CharSet.Ansi)&amp;gt; _&lt;br /&gt;    Private Shared Function ImmReleaseContext(ByVal hWnd As IntPtr, ByVal hIMC As IntPtr) As Integer&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    &amp;lt;DllImport("Imm32.dll", CharSet:=CharSet.Ansi)&amp;gt; _&lt;br /&gt;    Private Shared Function ImmGetCompositionString(ByVal hIMC As IntPtr, ByVal dwIndex As Integer, ByVal lpBuf As System.Text.StringBuilder, ByVal dwBufLen As Integer) As Integer&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    &amp;lt;DllImport("Imm32.dll", CharSet:=CharSet.Ansi)&amp;gt; _&lt;br /&gt;    Private Shared Function ImmGetOpenStatus(ByVal hIMC As IntPtr) As Integer&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    '-----イベント定義-----&lt;br /&gt;&lt;br /&gt;    Public Event KanaCommitted(ByVal e As KanaEventArgs)&lt;br /&gt;&lt;br /&gt;    '-----Protectedメソッド-----&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)&lt;br /&gt;        Dim handled As Boolean = False&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        Select Case m.Msg&lt;br /&gt;            Case WM_IME_COMPOSITION&lt;br /&gt;&lt;br /&gt;                Dim strFurigana As String = ""&lt;br /&gt;&lt;br /&gt;                Dim hIMC As IntPtr = ImmGetContext(Me.Handle)&lt;br /&gt;                Try&lt;br /&gt;                    '-- ふりがな文字列&lt;br /&gt;                    Dim intLength As Integer = ImmGetCompositionString(hIMC, GCS_RESULTREADSTR, Nothing, 0)&lt;br /&gt;                    If intLength &amp;gt; 0 Then&lt;br /&gt;                        Dim str As New System.Text.StringBuilder(intLength)&lt;br /&gt;                        ImmGetCompositionString(hIMC, GCS_RESULTREADSTR, str, intLength)&lt;br /&gt;                        strFurigana = str.ToString&lt;br /&gt;                        If strFurigana.Length &amp;gt; intLength Then&lt;br /&gt;                            strFurigana = strFurigana.Substring(0, intLength)&lt;br /&gt;                        End If&lt;br /&gt;                        'イベント起動&lt;br /&gt;                        Dim ev As New KanaEventArgs(strFurigana, False)&lt;br /&gt;                        OnKanaCommited(ev)&lt;br /&gt;                    End If&lt;br /&gt;                Finally&lt;br /&gt;                    ImmReleaseContext(Me.Handle, hIMC)&lt;br /&gt;                End Try&lt;br /&gt;&lt;br /&gt;            Case WM_CHAR    '半角英数字&lt;br /&gt;&lt;br /&gt;                Dim hIMC As IntPtr = ImmGetContext(Me.Handle)&lt;br /&gt;                Try&lt;br /&gt;                    If ImmGetOpenStatus(hIMC) = 0 Then&lt;br /&gt;                        If m.WParam.ToInt32 &amp;gt;= 32 Then&lt;br /&gt;                            'イベント起動&lt;br /&gt;                            Dim ev As New KanaEventArgs(Chr(m.WParam.ToInt32), False)&lt;br /&gt;                            OnKanaCommited(ev)&lt;br /&gt;                        End If&lt;br /&gt;                    End If&lt;br /&gt;                Finally&lt;br /&gt;                    ImmReleaseContext(Me.Handle, hIMC)&lt;br /&gt;                End Try&lt;br /&gt;&lt;br /&gt;        End Select&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        If Not handled Then MyBase.WndProc(m)&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Protected Overridable Sub OnKanaCommited(ByVal e As KanaEventArgs)&lt;br /&gt;        'カナを取得する場合は&lt;br /&gt;        '--IMEの入力文字より半角カナと数字以外を除去します。&lt;br /&gt;        If Not String.IsNullOrEmpty(e.Kana) Then&lt;br /&gt;            e.Kana = GetMatchRegexString(e.Kana, "[ｦ-ﾟ]|[0-9]")&lt;br /&gt;        End If&lt;br /&gt;        '--仮名確定イベントを起動します。&lt;br /&gt;        RaiseEvent KanaCommitted(e)&lt;br /&gt;&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    '-----Privateメソッド-----&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;&lt;br /&gt;    ''' 文字列から許可された文字を連結して取得します。&lt;br /&gt;    ''' &amp;lt;/summary&amp;gt;&lt;br /&gt;    ''' &amp;lt;param name="target"&amp;gt;検査する文字列&amp;lt;/param&amp;gt;&lt;br /&gt;    ''' &amp;lt;param name="pattern"&amp;gt;許可するパターン&amp;lt;/param&amp;gt;&lt;br /&gt;    ''' &amp;lt;returns&amp;gt;引数に指定した文字列から許可された文字だけを連結して返します。&amp;lt;/returns&amp;gt;&lt;br /&gt;    ''' &amp;lt;remarks&amp;gt;&lt;br /&gt;    ''' &amp;lt;/remarks&amp;gt;&lt;br /&gt;    Private Shared Function GetMatchRegexString(ByVal target As String, ByVal pattern As String) As String&lt;br /&gt;&lt;br /&gt;        If pattern = String.Empty Then&lt;br /&gt;            Return target&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;        Dim stReturn As String = String.Empty&lt;br /&gt;        For Each chTarget As Char In target&lt;br /&gt;            If IsMatchRegexPattern(chTarget, pattern) Then&lt;br /&gt;                stReturn &amp;amp;= chTarget&lt;br /&gt;            End If&lt;br /&gt;        Next chTarget&lt;br /&gt;&lt;br /&gt;        Return stReturn&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;&lt;br /&gt;    ''' 文字が許可するパターンかどうかを検査します。&lt;br /&gt;    ''' &amp;lt;/summary&amp;gt;&lt;br /&gt;    ''' &amp;lt;param name="target"&amp;gt;検査する文字&amp;lt;/param&amp;gt;&lt;br /&gt;    ''' &amp;lt;param name="pattern"&amp;gt;許可するパターン&amp;lt;/param&amp;gt;&lt;br /&gt;    ''' &amp;lt;returns&amp;gt;引数に指定した検査する文字が、引数に指定した許可するパターンであればTrue、それ以外はFalse。&amp;lt;/returns&amp;gt;&lt;br /&gt;    ''' &amp;lt;remarks&amp;gt;&lt;br /&gt;    ''' &amp;lt;/remarks&amp;gt;&lt;br /&gt;    Private Shared Function IsMatchRegexPattern(ByVal target As Char, ByVal pattern As String) As Boolean&lt;br /&gt;        If pattern = String.Empty OrElse System.Text.RegularExpressions.Regex.IsMatch(target, pattern) Then&lt;br /&gt;            Return True&lt;br /&gt;        End If&lt;br /&gt;    End Function&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;カスタムテキストボックスが発生させるKanaCommittedイベントのイベントデータクラスです。&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Public Class KanaEventArgs&lt;br /&gt;    Inherits EventArgs&lt;br /&gt;&lt;br /&gt;    '-----Private変数-----&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;仮名&amp;lt;/summary&amp;gt;&lt;br /&gt;    Private _sKana As String&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;振り仮名がキャンセルされたかどうか&amp;lt;/summary&amp;gt;&lt;br /&gt;    Private _isCancel As Boolean&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    '-----コンストラクタ------&lt;br /&gt;&lt;br /&gt;    Public Sub New()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Public Sub New(ByVal sKana As String, ByVal isCancel As Boolean)&lt;br /&gt;        Me._sKana = sKana&lt;br /&gt;        Me._isCancel = isCancel&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    '-----Publicプロパティ-----&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;&lt;br /&gt;    ''' 仮名を取得および設定します。&lt;br /&gt;    ''' &amp;lt;/summary&amp;gt;&lt;br /&gt;    ''' &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;    ''' &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;    ''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;br /&gt;    Public Property Kana() As String&lt;br /&gt;        Get&lt;br /&gt;            Return Me._sKana&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal value As String)&lt;br /&gt;            Me._sKana = value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;&lt;br /&gt;    ''' 振り仮名がキャンセルされたかどうかを取得および設定します。&lt;br /&gt;    ''' ※テキストボックスの値がクリアされたときTrueになります。&lt;br /&gt;    ''' &amp;lt;/summary&amp;gt;&lt;br /&gt;    ''' &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;    ''' &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;    ''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;br /&gt;    Public Property Cancel() As Boolean&lt;br /&gt;        Get&lt;br /&gt;            Return Me._isCancel&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal value As Boolean)&lt;br /&gt;            Me._isCancel = value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-5034610970075004356?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/5034610970075004356/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=5034610970075004356&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5034610970075004356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5034610970075004356'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/07/net.html' title='.NET　振り仮名を取得する'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-5328710358095365253</id><published>2010-07-22T15:36:00.002+09:00</published><updated>2010-08-17T16:56:26.963+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　50音検索</title><content type='html'>50音検索って結構面倒ですね・・・&lt;br /&gt;&lt;br /&gt;データテーブルに半角カナで保存されているフィールドを50音検索するサンプルです。&lt;br /&gt;&lt;br /&gt;SQLのWhere句に Tool.KanaSearchFilterStringメソッドの戻り値を付ければ&lt;br /&gt;データテーブル以外にもデータベースに対しても50音検索できます。&lt;br /&gt;&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Public Class Form1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    Private _tbl As DataTable&lt;br /&gt;&lt;br /&gt;    Public Sub New()&lt;br /&gt;&lt;br /&gt;        ' この呼び出しは、Windows フォーム デザイナで必要です。&lt;br /&gt;        InitializeComponent()&lt;br /&gt;&lt;br /&gt;        ' InitializeComponent() 呼び出しの後で初期化を追加します。&lt;br /&gt;&lt;br /&gt;        'テストデータ作成&lt;br /&gt;        Call CreateTestData()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    'テストデータ作成&lt;br /&gt;    Private Sub CreateTestData()&lt;br /&gt;&lt;br /&gt;        Dim tbl As New DataTable&lt;br /&gt;        tbl.Columns.Add("Kana", GetType(String))&lt;br /&gt;        tbl.Rows.Add(New Object() {"ｱ"})&lt;br /&gt;        tbl.Rows.Add(New Object() {"ｶ"})&lt;br /&gt;        tbl.Rows.Add(New Object() {"ｻ"})&lt;br /&gt;        tbl.Rows.Add(New Object() {"ﾀ"})&lt;br /&gt;        tbl.Rows.Add(New Object() {"ﾅ"})&lt;br /&gt;        tbl.Rows.Add(New Object() {"ﾊ"})&lt;br /&gt;        tbl.Rows.Add(New Object() {"ﾏ"})&lt;br /&gt;        tbl.Rows.Add(New Object() {"ﾔ"})&lt;br /&gt;        tbl.Rows.Add(New Object() {"ﾗ"})&lt;br /&gt;        tbl.Rows.Add(New Object() {"ﾜ"})&lt;br /&gt;&lt;br /&gt;        Me._tbl = tbl&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub rdoKana_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _&lt;br /&gt;    Handles rdoKana_All.CheckedChanged _&lt;br /&gt;            , rdoKana_A.CheckedChanged _&lt;br /&gt;            , rdoKana_Ka.CheckedChanged _&lt;br /&gt;            , rdoKana_Sa.CheckedChanged _&lt;br /&gt;            , rdoKana_Ta.CheckedChanged _&lt;br /&gt;            , rdoKana_Na.CheckedChanged _&lt;br /&gt;            , rdoKana_Ha.CheckedChanged _&lt;br /&gt;            , rdoKana_Ma.CheckedChanged _&lt;br /&gt;            , rdoKana_Ya.CheckedChanged _&lt;br /&gt;            , rdoKana_Ra.CheckedChanged _&lt;br /&gt;            , rdoKana_Wa.CheckedChanged _&lt;br /&gt;            , rdoKana_Other.CheckedChanged&lt;br /&gt;&lt;br /&gt;        If DirectCast(sender, RadioButton).Checked = False Then&lt;br /&gt;            Return&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;        Dim kana As Tool.KanaSearchType&lt;br /&gt;        If rdoKana_A.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.A&lt;br /&gt;        ElseIf rdoKana_Ka.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Ka&lt;br /&gt;        ElseIf rdoKana_Sa.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Sa&lt;br /&gt;        ElseIf rdoKana_Ta.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Ta&lt;br /&gt;        ElseIf rdoKana_Na.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Na&lt;br /&gt;        ElseIf rdoKana_Ha.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Ha&lt;br /&gt;        ElseIf rdoKana_Ma.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Ma&lt;br /&gt;        ElseIf rdoKana_Ya.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Ya&lt;br /&gt;        ElseIf rdoKana_Ra.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Ra&lt;br /&gt;        ElseIf rdoKana_Wa.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Wa&lt;br /&gt;        ElseIf rdoKana_Other.Checked Then&lt;br /&gt;            kana = Tool.KanaSearchType.Other&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;        Dim sFilter As String = String.Empty&lt;br /&gt;        sFilter = Tool.KanaSearchFilterString("Kana", kana, Tool.KanaSearchDataType.DataTable)&lt;br /&gt;        Dim row() As DataRow = Me._tbl.Select(sFilter)&lt;br /&gt;&lt;br /&gt;        Console.WriteLine("【{0}】", kana.ToString)&lt;br /&gt;        For Each r As DataRow In row&lt;br /&gt;            Console.WriteLine(r.Item(0))&lt;br /&gt;        Next&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Public Class Tool&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;&lt;br /&gt;    ''' 50音検索の検索文字&lt;br /&gt;    ''' &amp;lt;/summary&amp;gt;&lt;br /&gt;    ''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;br /&gt;    Public Enum KanaSearchType&lt;br /&gt;        A = 1&lt;br /&gt;        Ka = 2&lt;br /&gt;        Sa = 3&lt;br /&gt;        Ta = 4&lt;br /&gt;        Na = 5&lt;br /&gt;        Ha = 6&lt;br /&gt;        Ma = 7&lt;br /&gt;        Ya = 8&lt;br /&gt;        Ra = 9&lt;br /&gt;        Wa = 10&lt;br /&gt;        Other = 11&lt;br /&gt;    End Enum&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;&lt;br /&gt;    ''' 50音検索するデータ種&lt;br /&gt;    ''' &amp;lt;/summary&amp;gt;&lt;br /&gt;    ''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;br /&gt;    Public Enum KanaSearchDataType&lt;br /&gt;        Oracle = 1&lt;br /&gt;        SQLServer = 2&lt;br /&gt;        Access = 3&lt;br /&gt;        DataTable = 4&lt;br /&gt;    End Enum&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;&lt;br /&gt;    ''' 50音検索を行うフィルター文字列を作成します。&lt;br /&gt;    ''' &amp;lt;/summary&amp;gt;&lt;br /&gt;    ''' &amp;lt;param name="sFieldNm"&amp;gt;50音検索を行うフィールド名&amp;lt;/param&amp;gt;&lt;br /&gt;    ''' &amp;lt;param name="kana"&amp;gt;検索するカナ&amp;lt;/param&amp;gt;&lt;br /&gt;    ''' &amp;lt;param name="dataType"&amp;gt;検索するデータ種&amp;lt;/param&amp;gt;&lt;br /&gt;    ''' &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;    ''' &amp;lt;remarks&amp;gt;&lt;br /&gt;    ''' &amp;lt;/remarks&amp;gt;&lt;br /&gt;    Public Shared Function KanaSearchFilterString(ByVal sFieldNm As String, ByVal kana As KanaSearchType, ByVal dataType As KanaSearchDataType) As String&lt;br /&gt;&lt;br /&gt;        'Oracle SubStr&lt;br /&gt;        'DataTable SubString&lt;br /&gt;        'SQLServer SubString&lt;br /&gt;        'Access Mid&lt;br /&gt;        Dim funcNm As String&lt;br /&gt;        Select Case dataType&lt;br /&gt;            Case KanaSearchDataType.Oracle&lt;br /&gt;                funcNm = "Substr"&lt;br /&gt;            Case KanaSearchDataType.Access&lt;br /&gt;                funcNm = "Mid"&lt;br /&gt;            Case Else&lt;br /&gt;                funcNm = "SubString"&lt;br /&gt;        End Select&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        Dim sFilter As String = String.Empty&lt;br /&gt;        If kana = KanaSearchType.A Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ｱ','ｲ','ｳ','ｴ','ｵ','ｧ','ｨ','ｩ','ｪ','ｫ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Ka Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ｶ','ｷ','ｸ','ｹ','ｺ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Sa Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ｻ','ｼ','ｽ','ｾ','ｿ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Ta Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ﾀ','ﾁ','ﾂ','ﾃ','ﾄ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Na Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ﾅ','ﾆ','ﾇ','ﾈ','ﾉ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Ha Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ﾊ','ﾋ','ﾌ','ﾍ','ﾎ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Ma Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ﾏ','ﾐ','ﾑ','ﾒ','ﾓ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Ya Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ﾔ','ﾕ','ﾖ','ｬ','ｭ','ｮ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Ra Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ﾗ','ﾘ','ﾙ','ﾚ','ﾛ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Wa Then&lt;br /&gt;            sFilter = "{0}({1},1,1) in ('ﾜ','ｦ','ﾝ')"&lt;br /&gt;        ElseIf kana = KanaSearchType.Other Then&lt;br /&gt;            sFilter = "{1} IS NULL OR {0}({1},1,1) not in ('ｱ','ｲ','ｳ','ｴ','ｵ','ｧ','ｨ','ｩ','ｪ','ｫ'" &amp;amp; _&lt;br /&gt;                                                        ",'ｶ','ｷ','ｸ','ｹ','ｺ'" &amp;amp; _&lt;br /&gt;                                                        ",'ｻ','ｼ','ｽ','ｾ','ｿ'" &amp;amp; _&lt;br /&gt;                                                        ",'ﾀ','ﾁ','ﾂ','ﾃ','ﾄ'" &amp;amp; _&lt;br /&gt;                                                        ",'ﾅ','ﾆ','ﾇ','ﾈ','ﾉ'" &amp;amp; _&lt;br /&gt;                                                        ",'ﾊ','ﾋ','ﾌ','ﾍ','ﾎ'" &amp;amp; _&lt;br /&gt;                                                        ",'ﾏ','ﾐ','ﾑ','ﾒ','ﾓ'" &amp;amp; _&lt;br /&gt;                                                        ",'ﾔ','ﾕ','ﾖ','ｬ','ｭ','ｮ'" &amp;amp; _&lt;br /&gt;                                                        ",'ﾗ','ﾘ','ﾙ','ﾚ','ﾛ'" &amp;amp; _&lt;br /&gt;                                                        ",'ﾜ','ｦ','ﾝ')"&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        If Not String.IsNullOrEmpty(sFilter) Then&lt;br /&gt;            sFilter = String.Format(sFilter, funcNm, sFieldNm)&lt;br /&gt;        End If&lt;br /&gt;        Return sFilter&lt;br /&gt;    End Function&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-5328710358095365253?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/5328710358095365253/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=5328710358095365253&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5328710358095365253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5328710358095365253'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/07/net50.html' title='.NET　50音検索'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-4782792426572926931</id><published>2010-06-25T11:48:00.004+09:00</published><updated>2010-07-23T09:54:03.068+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　Integer型配列をString配列に変換するには　Fw3.5～</title><content type='html'>Framework3.5以上　ラムダ式を使用して&lt;br /&gt;Integer型配列をString配列に変換します。&lt;br /&gt;&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Dim aryInt() As Integer = {1, 2, 3, 4, 5}&lt;br /&gt;Dim aryStr() As String&lt;br /&gt;&lt;br /&gt;aryStr = Array.ConvertAll(Of Integer, String)(aryInt, Function(i As Integer) i.ToString)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;または&lt;br /&gt;Framework3.5以上　LinqのSelectメソッドを使用して&lt;br /&gt;Integer型配列をString配列に変換します。&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Dim aryInt() As Integer = {0, 1, 2, 3, 4}&lt;br /&gt;Dim aryStr() As String&lt;br /&gt;&lt;br /&gt;aryStr = aryInt.Select(Of String)(Function(i) i.ToString).ToArray()&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-4782792426572926931?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/4782792426572926931/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=4782792426572926931&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4782792426572926931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/4782792426572926931'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/06/integerstringfw35.html' title='.NET　Integer型配列をString配列に変換するには　Fw3.5～'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-3456404623784112750</id><published>2010-06-04T13:19:00.005+09:00</published><updated>2010-08-17T16:56:58.848+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　構成ファイルapp.configの暗号化</title><content type='html'>キーの配布などがなく、複号化の手間がない方法でapp.configのセクションを暗号化する方法です。&lt;br /&gt;&lt;br /&gt;キーの配布をしたくないので、ユーザマシンでインストール時にapp.configを暗号化します。&lt;br /&gt;復号化は自動でやってくれるので、app.configから値を取得するコードは変更しなくても大丈夫です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;app.configのappSettingsセクションとConnectionStringsセクションを暗号化するサンプルです。&lt;br /&gt;&lt;br /&gt;１、まずWindowsアプリケーションを作成し、appSettingsセクションとConnectionStringsセクションのあるapp.configを用意します。&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;appsettings&amp;gt;&lt;br /&gt;    &amp;lt;add key="PASSWORD" value="ABCDEFGHIJKLMN"&amp;gt;&lt;br /&gt;  &amp;lt;/appsettings&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;connectionstrings&amp;gt;&lt;br /&gt;    &amp;lt;add connectionstring="user id=username;password=pswd;data source=mydb" name="DB1" providername="System.Data.OracleClient"&amp;gt;&lt;br /&gt;  &amp;lt;/connectionstrings&amp;gt;&lt;br /&gt;  &lt;br /&gt;  …省略…&lt;br /&gt;  &lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;２、インストーラで実行するカスタム動作を定義したクラスを作成します。&lt;br /&gt;同じソリューションに新しいクラスライブラリのプロジェクトを作成します。&lt;br /&gt;参照設定に「System.Configuration.dll」と「System.Configuration.Install.dll」を追加します。&lt;br /&gt;そして「System.Configuration.Install.Installer」クラスを継承したクラスを作成します。&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Imports System.Configuration&lt;br /&gt;&lt;br /&gt;&amp;lt;system.componentmodel.runinstaller(true)&amp;gt; _&lt;br /&gt;Public Class Class1&lt;br /&gt;    Inherits System.Configuration.Install.Installer&lt;br /&gt;&lt;br /&gt;    Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)&lt;br /&gt;        MyBase.Install(stateSaver)&lt;br /&gt;&lt;br /&gt;        Call CryptographyAppConfig()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    ''' &amp;lt;summary&amp;gt;&lt;br /&gt;    ''' app.configのセクションを暗号化します。&lt;br /&gt;    ''' &amp;lt;/summary&amp;gt;&lt;br /&gt;    ''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;br /&gt;    Private Sub CryptographyAppConfig()&lt;br /&gt;        Dim sProtectedProvider As String = "DataProtectionConfigurationProvider"&lt;br /&gt;&lt;br /&gt;        ' インストール先の情報を取得&lt;br /&gt;        Dim targetDir As String = Me.Context.Parameters("targetdir")&lt;br /&gt;        Dim appNmae As String = Me.Context.Parameters("appname")&lt;br /&gt;&lt;br /&gt;        'app.config&lt;br /&gt;        Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(targetDir + appNmae)&lt;br /&gt;&lt;br /&gt;        'app.configのセクションを暗号化&lt;br /&gt;        Dim sec1 As ConfigurationSection = config.GetSection("appSettings")&lt;br /&gt;        sec1.SectionInformation.ProtectSection(sProtectedProvider)&lt;br /&gt;        sec1.SectionInformation.ForceSave = True&lt;br /&gt;&lt;br /&gt;        Dim sec2 As ConfigurationSection = config.GetSection("connectionStrings")&lt;br /&gt;        sec2.SectionInformation.ProtectSection(sProtectedProvider)&lt;br /&gt;        sec2.SectionInformation.ForceSave = True&lt;br /&gt;&lt;br /&gt;        config.Save(ConfigurationSaveMode.Full)&lt;br /&gt;&lt;br /&gt;    End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;３、セットアッププロジェクトを作成します。&lt;br /&gt;同じソリューションにセットアッププロジェクトを追加し、アプリケーションフォルダに&lt;br /&gt;１で作成したWindowsアプリケーションのプライマリ出力&lt;br /&gt;２で作成したクラスライブラリのプリマり出力を追加します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TAh-iXiP4-I/AAAAAAAABJQ/R705V5gpc3w/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TAh-iXiP4-I/AAAAAAAABJQ/R705V5gpc3w/s320/1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;次にセットアッププロジェクトの「カスタム動作エディタ」を開き「インストール」ノードを右クリック「カスタム動作の追加」を選択します。&lt;br /&gt;「アプリケーションフォルダ」からクラスライブラリのプリマり出力を選択します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TAh-pgqroTI/AAAAAAAABJY/iXJ_Xtun3uI/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TAh-pgqroTI/AAAAAAAABJY/iXJ_Xtun3uI/s320/2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;追加したカスタム動作のCustomActionDataプロパティに&lt;b&gt;/targetdir="[TARGETDIR]/" /appname="WindowsApplication2.exe"&lt;/b&gt;を設定します。&lt;br /&gt;※appnameは１で作成したWindowsアプリケーションのexeを指定してください。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/TAh-v4YopPI/AAAAAAAABJg/qBIlAeJLTzc/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/TAh-v4YopPI/AAAAAAAABJg/qBIlAeJLTzc/s320/3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;以上で設定は終了です。&lt;br /&gt;作成したセットアッププロジェクトでインストールを実行すると、app.configが暗号化されています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-3456404623784112750?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/3456404623784112750/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=3456404623784112750&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3456404623784112750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3456404623784112750'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/06/netappconfig.html' title='.NET　構成ファイルapp.configの暗号化'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/TAh-iXiP4-I/AAAAAAAABJQ/R705V5gpc3w/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8531135426592943543</id><published>2010-06-03T14:18:00.003+09:00</published><updated>2010-08-17T17:59:37.169+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　Sandcastleを使用してXMLコメントからヘルプを作成する。</title><content type='html'>Sandcastleを使用してXMLコメントからヘルプを作成する方法です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まず必要なツールをダウンロードしインストールします。&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=e82ea71d-da89-42ee-a715-696e3a4873b2"&gt;Sandcastle Ver 2.4.10520&lt;/a&gt;よりSandcastle.msiをダウンロードし、インストールします。&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=00535334-C8A6-452F-9AA0-D597D16580CC&amp;amp;displaylang=en"&gt;HTML Help Workshop and Documentation Ver 1.32&lt;/a&gt;よりhtmlhelp.exeをダウンロードし、インストールします。&lt;br /&gt;&lt;a href="http://shfb.codeplex.com/releases/view/29710"&gt;Sandcastle Help File Builder Ver 1.8.0.3&lt;/a&gt;をダウンロードし、インストールします。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;すべてのプログラムより「Sandcastle Help File Builder」→「Sandcastle Help File Builder GUI」選択してSandcastle Help File Builder起動します。&lt;br /&gt;&lt;br /&gt;「File」メニューの「New Project」を選択します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/TAc66xRXgJI/AAAAAAAABJA/aw3S6OrKoMI/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/TAc66xRXgJI/AAAAAAAABJA/aw3S6OrKoMI/s320/1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;ファイル保存ダイアログが表示されますので、ヘルププロジェクト名をつけて保存ボタンをクリックします。&lt;br /&gt;※パスに日本語が含まれるとビルド時にエラーになってしまうようです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;「Porject Explorer」の「Documentation Sources」を右クリックし「Add Documentation Source…」をクリックします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/TAc7Fkyj7MI/AAAAAAAABJI/nNwTNdWgRc8/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/TAc7Fkyj7MI/AAAAAAAABJI/nNwTNdWgRc8/s320/2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;ファイル選択ダイアログが表示されますので、ヘルプファイルを作成したいソリューションやプロジェクト、exe、dllなどを選択します。&lt;br /&gt;&lt;br /&gt;「Project Properties」の&lt;br /&gt;「Help File」セクションの「Language」を日本語（日本）にします。&lt;br /&gt;「Help File」セクションの「HtmlHelpName」にビルドすると作成されるヘルプファイル(chm)名を入力します。&lt;br /&gt;「Visibility」セクションの「DocumentInheritedFrameworkMembers」Frameworkのクラスから継承したメンバを出力しない場合はFalseを設定します。&lt;br /&gt;「Comments」セクションの「NamespaceSummaries」名前空間の説明を設定します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;「Documentation」メニューの「Build Project」を選択するとビルドが始まります。&lt;br /&gt;ビルドが終了すると、ヘルププロジェクトフォルダの下に「Help」フォルダが作成され、そこに「HtmlHelpName」で指定したchmファイルが作成されます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8531135426592943543?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8531135426592943543/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8531135426592943543&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8531135426592943543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8531135426592943543'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/06/netsandcastlexml.html' title='.NET　Sandcastleを使用してXMLコメントからヘルプを作成する。'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__ZiZX_sgyy4/TAc66xRXgJI/AAAAAAAABJA/aw3S6OrKoMI/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-1115081086657449475</id><published>2010-04-27T12:05:00.004+09:00</published><updated>2010-04-27T12:07:49.095+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET(Mobile)'/><title type='text'>.Net(Mobile)   無線Lan(WiFi)のON/OFFを行うには</title><content type='html'>無線LanのON/OFFを行うにはSetDevicePowerというAPIを使用します。&lt;br /&gt;このSetDevicePowerの第一引数に渡す値が端末により異なるので注意が必要です。&lt;br /&gt;&lt;br /&gt;手元にある機種がSoftbankのX04HTとDocomoのX01Aだけなので、この2台で確認した結果です。&lt;br /&gt;&lt;br /&gt;まず端末のレジストリ「HEKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Power/State」を確認します。&lt;br /&gt;{98C5250D-C29A-4985-AE5F-AFE5367E5006}で始まるものが無線Lanになります。この値が1なら接続状態で0が切断状態です。&lt;br /&gt;&lt;br /&gt;{98C5250D-C29A-4985-AE5F-AFE5367E5006}の後に続く&amp;yen;以降の文字列が端末により異なります。&lt;br /&gt;SoftbankのX04HTは{98C5250D-C29A-4985-AE5F-AFE5367E5006}&amp;yen;TNETW12511&lt;br /&gt;DocomoのX01Aは{98C5250D-C29A-4985-AE5F-AFE5367E5006}&amp;yen;AR6K_SD1&lt;br /&gt;&lt;br /&gt;この&amp;yen;以降の文字列はレジストリ「HEKEY_LOCAL_MACHINE/Software/Drivers/WLAN」の「AdapterName」の値です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以下のサンプルコードはSoftbankのX04HTとDocomoのX01Aで検証しましたが、他の端末で動作するかわかりません。&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Imports System.Runtime.InteropServices&lt;br /&gt;&lt;br /&gt;Public Class Form1&lt;br /&gt;&lt;br /&gt;    Private Enum DevicePowerState&lt;br /&gt;        Unspecified = -1&lt;br /&gt;        D0 = 0 ' Full On: full power, full functionality  &lt;br /&gt;        D1 ' Low Power On: fully functional at low power/performance  &lt;br /&gt;        D2 'Standby: partially powered with automatic wake  &lt;br /&gt;        D3 'Sleep: partially powered with device initiated wake  &lt;br /&gt;        D4 'Off: unpowered  &lt;br /&gt;    End Enum&lt;br /&gt;&lt;br /&gt;    &lt;DllImport("coredll.dll")&gt; _&lt;br /&gt;    Private Shared Function SetDevicePower(ByVal pvDevice As String, ByVal dwDeviceFlags As Int32, ByVal deviceState As DevicePowerState) As Int32&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    &lt;DllImport("coredll.dll")&gt; _&lt;br /&gt;    Private Shared Function DevicePowerNotify(ByVal pvDevice As String, ByVal state As DevicePowerState, ByVal dwDeviceFlags As Int32) As Int32&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    Private Const POWER_NAME As Int32 = 1&lt;br /&gt;&lt;br /&gt;    Private Const wifiGUID As String = "{98C5250D-C29A-4985-AE5F-AFE5367E5006}"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    'WirelessLan ON&lt;br /&gt;    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click&lt;br /&gt;        SetWiFi(True)&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    'WirelessLan OFF&lt;br /&gt;    Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click&lt;br /&gt;        SetWiFi(False)&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub SetWiFi(ByVal isEnabled As Boolean)&lt;br /&gt;        'レジストリよりWiFiのドライバ名を取得する&lt;br /&gt;        Dim regDrivers As RegistryKey = Registry.LocalMachine.CreateSubKey("Software\Drivers\WLAN")&lt;br /&gt;        Dim driverNm As String = regDrivers.GetValue("AdapterName").ToString&lt;br /&gt;        Dim guid As String = wifiGUID &amp; "&amp;yen;" &amp; driverNm&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        'D0でON、D4でOFF&lt;br /&gt;        If (isEnabled) Then&lt;br /&gt;            DevicePowerNotify(guid, DevicePowerState.D0, POWER_NAME)&lt;br /&gt;            SetDevicePower(guid, POWER_NAME, DevicePowerState.D0)&lt;br /&gt;        Else&lt;br /&gt;            DevicePowerNotify(guid, DevicePowerState.D4, POWER_NAME)&lt;br /&gt;            SetDevicePower(guid, POWER_NAME, DevicePowerState.D4)&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-1115081086657449475?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/1115081086657449475/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=1115081086657449475&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1115081086657449475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1115081086657449475'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/04/netmobile-lanwifionoff.html' title='.Net(Mobile)   無線Lan(WiFi)のON/OFFを行うには'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-1059351348297788429</id><published>2010-04-27T11:47:00.003+09:00</published><updated>2010-04-27T11:48:43.626+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET(Mobile)'/><title type='text'>.Net(Mobile)  BlutoothのON/OFFを行うには</title><content type='html'>BlutoothのON/OFFを行うにはBthSetModeというAPIを使用します。&lt;br /&gt;&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Imports System.Runtime.InteropServices&lt;br /&gt;&lt;br /&gt;Public Class Form1&lt;br /&gt;    Public Enum RadioMode&lt;br /&gt;        RadioOff = 0            'Bluetooth OFF&lt;br /&gt;        Connectable = 1         'Bluetooth ON(他のデバイスから検索不可)&lt;br /&gt;        Discoverable = 2        'Bluetooth ON(他のデバイスから検索可)&lt;br /&gt;    End Enum&lt;br /&gt;    &lt;br /&gt;    &lt;DllImport("BthUtil.dll")&gt; _&lt;br /&gt;    Public Shared Function BthGetMode(ByRef dwMode As RadioMode) As Integer&lt;br /&gt;    End Function&lt;br /&gt;    &lt;br /&gt;    &lt;DllImport("BthUtil.dll")&gt; _&lt;br /&gt;    Public Shared Function BthSetMode(ByVal dwMode As RadioMode) As Integer&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    'Bluetooth ON&lt;br /&gt;    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&lt;br /&gt;        SetBluetooth(True)&lt;br /&gt;    End Sub&lt;br /&gt;    &lt;br /&gt;    'Bluetooth　OFF&lt;br /&gt;    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click&lt;br /&gt;        SetBluetooth(False)&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub SetBluetooth(ByVal isEnabled As Boolean)&lt;br /&gt;        If (isEnabled) Then&lt;br /&gt;            Dim mode As RadioMode = RadioMode.RadioOff&lt;br /&gt;            Dim ret As Integer = BthGetMode(mode)&lt;br /&gt;            If mode = RadioMode.RadioOff Then&lt;br /&gt;                ret = BthSetMode(RadioMode.Discoverable)&lt;br /&gt;                If ret = 0 Then&lt;br /&gt;                    Do&lt;br /&gt;                        System.Threading.Thread.Sleep(100)&lt;br /&gt;                        ret = BthGetMode(mode)&lt;br /&gt;                        If ret &lt;&gt; 0 OrElse mode &lt;&gt; RadioMode.RadioOff Then&lt;br /&gt;                            Exit Do&lt;br /&gt;                        End If&lt;br /&gt;                    Loop&lt;br /&gt;                End If&lt;br /&gt;            End If&lt;br /&gt;        Else&lt;br /&gt;            Dim mode As RadioMode = RadioMode.Connectable&lt;br /&gt;            Dim ret As Integer = BthGetMode(mode)&lt;br /&gt;            If mode = RadioMode.Connectable Or mode = RadioMode.Discoverable Then&lt;br /&gt;                ret = BthSetMode(RadioMode.RadioOff)&lt;br /&gt;            End If&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-1059351348297788429?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/1059351348297788429/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=1059351348297788429&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1059351348297788429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/1059351348297788429'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/04/netmobile-blutoothonoff.html' title='.Net(Mobile)  BlutoothのON/OFFを行うには'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-5260694699356729551</id><published>2010-04-21T12:57:00.002+09:00</published><updated>2010-04-21T15:14:18.724+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET(Mobile)'/><title type='text'>.Net(Mobile)  NumericUpDownコントロールで値を選択状態にする。</title><content type='html'>CompactFrameworkではNumericUpDownコントロールのSelectAllプロパティがありません。&lt;br /&gt;NumericUpDownコントロールで値を選択状態にするにはAPIを使用します。&lt;br /&gt;&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Public Class FrmPrint&lt;br /&gt;&lt;br /&gt;    Public Const SETSEL As Integer = &amp;HB1&lt;br /&gt;    &amp;lt;DllImport("coredll")&amp;gt; _&lt;br /&gt;    Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    'NumericUpDownコントロールにFocusされた時、値を選択状態にする。&lt;br /&gt;    Private Sub NumericUpDown1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) _&lt;br /&gt;    HandlesNumericUpDown1.GotFocus&lt;br /&gt;            '入力文字を全選択する&lt;br /&gt;            Dim nud As NumericUpDown = DirectCast(sender, NumericUpDown)&lt;br /&gt;            SendMessage(nud.Handle, SETSEL, 0, nud.Value.ToString.Length)&lt;br /&gt;    End Sub&lt;br /&gt;    &lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-5260694699356729551?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/5260694699356729551/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=5260694699356729551&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5260694699356729551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/5260694699356729551'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/04/netmobile-numericupdown.html' title='.Net(Mobile)  NumericUpDownコントロールで値を選択状態にする。'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-3028633434400642733</id><published>2010-04-16T14:19:00.007+09:00</published><updated>2010-04-21T12:03:47.800+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET プリンターのプロパティ画面を表示するには</title><content type='html'>&lt;a href="http://yan-note.blogspot.com/2008/01/vistapagesetupdialog.html"&gt;.NET　VistaではPageSetupDialogでプリンタ設定ボタンが表示されない&lt;/a&gt;で書いた&lt;br /&gt;プリンターのプロパティ画面を表示する方法ですが、プリンタを変更するとプリンタドライバに依存するDEVMODE 構造体部分がメモリ確保されていないためエラーになることがあり&lt;br /&gt;Marshal.AllocCoTaskMemを使った方法に訂正します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Imports System.Runtime.InteropServices&lt;br /&gt;&lt;br /&gt;Public Class Form1&lt;br /&gt;    &amp;lt;DllImport("winspool.drv", CharSet:=CharSet.Auto, SetLastError:=True)&amp;gt; _&lt;br /&gt;    Private Shared Function OpenPrinter( _&lt;br /&gt;    &amp;lt;MarshalAs(UnmanagedType.LPTStr)&amp;gt; ByVal pPrinterName As String, ByRef hPrinter As IntPtr, ByVal pDefault As IntPtr) As Int32&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    &amp;lt;DllImport("winspool.drv", SetLastError:=True)&amp;gt; _&lt;br /&gt;    Private Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Int32&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    &amp;lt;DllImport("winspool.drv", SetLastError:=True)&amp;gt; _&lt;br /&gt;    Private Shared Function DocumentProperties ( _&lt;br /&gt;        ByVal hwnd As IntPtr, _&lt;br /&gt;        ByVal hPrinter As IntPtr, _&lt;br /&gt;        &amp;lt;MarshalAs(UnmanagedType.LPTStr)&amp;gt; ByVal pDeviceName As String, _&lt;br /&gt;        ByVal pDevModeOut As IntPtr, _&lt;br /&gt;        ByVal pDevModeIn As IntPtr, _&lt;br /&gt;        ByVal fMode As Int32) As Int32&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    Private Const DM_OUT_BUFFER As Short = 2&lt;br /&gt;    Private Const DM_IN_PROMPT As Short = 4&lt;br /&gt;    Private Const DM_IN_BUFFER As Short = 8&lt;br /&gt;&lt;br /&gt;    &amp;lt;DllImport("kernel32", SetLastError:=True)&amp;gt; _&lt;br /&gt;    Private Shared Function GlobalLock(ByVal hmem As IntPtr) As IntPtr&lt;br /&gt;    End Function&lt;br /&gt;    &lt;br /&gt;    &amp;lt;DllImport("kernel32", SetLastError:=True)&amp;gt; _&lt;br /&gt;    Private Shared Function GlobalFree(ByVal hmem As IntPtr) As Int32&lt;br /&gt;    End Function&lt;br /&gt;    &lt;br /&gt;    &amp;lt;DllImport("kernel32", SetLastError:=True)&amp;gt; _&lt;br /&gt;    Private Shared Function GlobalUnlock(ByVal hMem As IntPtr) As Int32&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&lt;br /&gt;        Dim printer As New Printing.PrinterSettings&lt;br /&gt;        Dim ret As Boolean = ShowPrinterProperty(Me.Handle, printer) &lt;br /&gt;    End Sub&lt;br /&gt;        &lt;br /&gt;    Private Function ShowPrinterProperty(ByVal hwnd As IntPtr, ByVal printer As Printing.PrinterSettings) As Boolean&lt;br /&gt;        Dim ret As Int32&lt;br /&gt;&lt;br /&gt;        'プリンタのハンドルを取得する&lt;br /&gt;        Dim hPrinter As IntPtr = IntPtr.Zero&lt;br /&gt;        ret = OpenPrinter(printer.PrinterName, hPrinter, IntPtr.Zero)&lt;br /&gt;        If (ret = 0 OrElse hPrinter = IntPtr.Zero) Then&lt;br /&gt;            Return False&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;        Try&lt;br /&gt;&lt;br /&gt;            'プリンタのDEVMODE構造体のサイズを取得する&lt;br /&gt;            Dim iDevModeSize As Integer = DocumentProperties(IntPtr.Zero, hPrinter, printer.PrinterName, IntPtr.Zero, IntPtr.Zero, 0)&lt;br /&gt;&lt;br /&gt;            'Input用のDEVMODE構造体のハンドルを取得する&lt;br /&gt;            Dim hDevModeIn As IntPtr = printer.GetHdevmode()&lt;br /&gt;            Dim pDevModeIn As IntPtr = GlobalLock(hDevModeIn)&lt;br /&gt;&lt;br /&gt;            'OutOut用のDEVMODE構造体のメモリを確保する&lt;br /&gt;            Dim pDevModeOut As IntPtr = Marshal.AllocCoTaskMem(iDevModeSize)&lt;br /&gt;            Try&lt;br /&gt;&lt;br /&gt;                '設定画面を開く&lt;br /&gt;                ret = DocumentProperties(hwnd, hPrinter, printer.PrinterName, pDevModeOut, pDevModeIn, DM_IN_PROMPT Or DM_IN_BUFFER Or DM_OUT_BUFFER)&lt;br /&gt;                If (ret = 1) Then&lt;br /&gt;                    printer.SetHdevmode(pDevModeOut)&lt;br /&gt;                End If&lt;br /&gt;&lt;br /&gt;                '&lt;br /&gt;                Return True&lt;br /&gt;&lt;br /&gt;            Finally&lt;br /&gt;                GlobalUnlock(hDevModeIn)&lt;br /&gt;                GlobalFree(hDevModeIn)&lt;br /&gt;                Marshal.FreeCoTaskMem(pDevModeOut)&lt;br /&gt;            End Try&lt;br /&gt;        Finally&lt;br /&gt;            ClosePrinter(hPrinter)&lt;br /&gt;        End Try&lt;br /&gt;    End Function&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-3028633434400642733?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/3028633434400642733/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=3028633434400642733&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3028633434400642733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/3028633434400642733'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/04/net.html' title='.NET プリンターのプロパティ画面を表示するには'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-6534075493179975071</id><published>2010-04-16T13:27:00.002+09:00</published><updated>2010-04-16T14:06:29.474+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑記'/><title type='text'>Java認定資格　SJC-P 310-055</title><content type='html'>Java認定資格　SJC-P 310-055　に合格しましたヽ(*´∀｀)ノ&lt;br /&gt;&lt;br /&gt;会社が受験料を払ってくれたのですが、「落ちた場合は自己負担で受かるまで受験すること」だったので&lt;br /&gt;バカ高い試験だし結構勉強しましたw&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;今までJavaを使った仕事はしたことがありません。&lt;br /&gt;数年前に一度だけJavaの仕事の話があって、ちょっと勉強したぐらいです。&lt;br /&gt;結局その仕事も流れて、業務では未経験です。&lt;br /&gt;&lt;br /&gt;試験勉強は以下の2冊の参考書を使いました。&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/Certified-Programmer-Platform-Exam310-055-TEXT%E2%80%95Sun%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88/dp/4797332921/ref=pd_sim_b_4"&gt;Sunテキスト Sun Certified Programmer for Java 2 Platform 5.0 [Exam310-055] SKILL-UP TEXT (SKILL-UP TEXT―Sunテキスト) (単行本) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5-Java2-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E5%95%8F%E9%A1%8C%E9%9B%86-Platform5-0-IT%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5/dp/4844323385/ref=pd_bxgy_b_img_b"&gt;徹底攻略 Java2 プログラマ問題集 Platform5.0 対応 (ITプロ/ITエンジニアのための徹底攻略) (単行本（ソフトカバー）) &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;試験は60問で35問以上(58%)で合格です。時間は180分。&lt;br /&gt;内容は思っていたより難しくなく、上記の2冊を勉強したら合格点は取れると思います。&lt;br /&gt;私は52問正解（86%)でした。&lt;br /&gt;&lt;br /&gt;試験はセパレータで区切られた席に座って行うのですが&lt;br /&gt;隣の人のキーボードやマウスの「カチッカチッ」という音や、椅子が「ギギー」となるので結構集中できません。&lt;br /&gt;&lt;br /&gt;私の隣には二人のおじさんが試験を受けておられ、すごい勢いで「カチッカチッ」となるので&lt;br /&gt;同じ試験を受けているわけではないけれど「お～すっげ～」と感心してしまいました。&lt;br /&gt;あと隣の人の独り言も気になりますw&lt;br /&gt;「ここがこうで・・・」とかブツブツいって試験が終わったら「よっしゃー」と言って帰られましたw&lt;br /&gt;防音用にヘッドホンがあるのですが、あんまり役に立ちませんでした。&lt;br /&gt;&lt;br /&gt;試験問題はパソコンで行うのですが、グレーの背景に読みにくいフォントです。&lt;br /&gt;時間はたっぷりあるので、ゆっくり問題を解いても見直す時間はあります。&lt;br /&gt;が、ドラッグドロップ問題は見直すと前回の選択がクリアされた状態で表示されますヽ(｀Д´#)ﾉ&lt;br /&gt;私は面倒だったのでドラッグドロップ問題は見直ししませんでした・・・&lt;br /&gt;できればドラッグドロップ問題は1回目でしっかり選択しておくことをお勧めします。&lt;br /&gt;&lt;br /&gt;あと1問だけメモ用紙がいるような問題がありました。&lt;br /&gt;受け付けの方は説明してくれませんでしたが、試験前にもらえるプラケースのなかに&lt;br /&gt;プラスチックの下敷きとマジックが入っていて、これをメモにするそうです。&lt;br /&gt;試験終了後に教えてもらえました(´Д⊂ヽ&lt;br /&gt;メモ用紙がないのでヘルプ画面を立ち上げて検索文字を入力するテキストボックスをメモにしてました・・・私。&lt;br /&gt;&lt;br /&gt;一番の難関は試験時間が長いので、途中で「もういいやぁ」という気分に襲われます。&lt;br /&gt;ここをグッとこらえて、試験時間いっぱい全部使ってやるという気持ちで耐えるのですが&lt;br /&gt;今度は寒さに襲われ、トイレに行きたくなりますw&lt;br /&gt;女性は膝かけなど用意された方が良いと思います♪&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-6534075493179975071?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/6534075493179975071/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=6534075493179975071&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6534075493179975071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/6534075493179975071'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/04/javasjc-p-310-055.html' title='Java認定資格　SJC-P 310-055'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8207651296789088587</id><published>2010-04-03T00:28:00.002+09:00</published><updated>2010-04-16T14:06:29.529+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑記'/><title type='text'>あいつぐ仕様変更・・・プログラマー殺すに刃物はいらぬ</title><content type='html'>今回の開発は納期が短いので仕様が30%程しか確定してない状態で開発が始まった。&lt;br /&gt;嫌だなぁとは思ったけれど、仕事だし「やれ」と言われればやるしかない。&lt;br /&gt;そんな大きなプロジェクトでもないから大丈夫かなと思った自分が甘かった(つд⊂)&lt;br /&gt;&lt;br /&gt;ある程度の前提条件などを聞き出して、開発を始めた。&lt;br /&gt;もちろんプログラムには変更が入る可能性も含めて幅を持たせたし&lt;br /&gt;ざっくり作って、仕様が確定するまであまり作りこまないようにした。&lt;br /&gt;&lt;br /&gt;とりあえずプロトタイプを提出し仕様を固めてもらう。&lt;br /&gt;固まったところから作りこみを始める。&lt;br /&gt;&lt;br /&gt;けれど仕様が固まったところなのに、仕様変更が入る。&lt;br /&gt;前提条件を覆すような仕様変更も入る。&lt;br /&gt;2度3度・・・5度、6度・・・。&lt;br /&gt;&lt;br /&gt;何度作っても、仕様変更。仕様変更。仕様変更。&lt;br /&gt;作っても作っても終わらない。&lt;br /&gt;同じところばっかり作ってるような気がして、全体の終わりも見えない。&lt;br /&gt;&lt;br /&gt;もうね、ソースコードの美しさとかどうでもよくなるね。&lt;br /&gt;心が挫けて、心が折れて、鬱っぽくなる・・・&lt;br /&gt;変に悲しくて、変に攻撃的で。うわぁ～自分ヤバイって感じ初めて経験しました｡･ﾟ･(ﾉД`)･ﾟ･｡&lt;br /&gt;&lt;br /&gt;私はプログラムは美しく書きたいんです。&lt;br /&gt;仕様変更で少しずつ崩れていくのは仕方ないにしても、新規に作成する時だけは美しくしておきたいんです。&lt;br /&gt;この気持ちが相次ぐ仕様変更には耐えられない。&lt;br /&gt;せめて前提条件だけは変えてくれるな( ﾟдﾟ )ｸﾜｯ!!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;プログラマー殺すに刃物はいらぬ、仕様を三回変えれば良い&lt;/b&gt; とはよく言ったもんだ。&lt;br /&gt;&lt;br /&gt;前提条件を覆すような仕様変更を何度も言われたら、そのシステムはもうどうでもいいわ。&lt;br /&gt;愛着ゼロ。モチベーションもゼロ。&lt;br /&gt;そんなプログラマからよいシステムなんて作れませんよ？わかってる？道連れだよ？&lt;br /&gt;&lt;br /&gt;仕様はもうちょっとよく考えてね！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8207651296789088587?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8207651296789088587/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8207651296789088587&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8207651296789088587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8207651296789088587'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/04/blog-post.html' title='あいつぐ仕様変更・・・プログラマー殺すに刃物はいらぬ'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-8059280534972147705</id><published>2010-04-02T20:52:00.002+09:00</published><updated>2010-04-02T20:55:12.533+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　Windowsサービス</title><content type='html'>Windowsサービスは滅多に作らないので、いつも作り方を忘れてしまうのでメモ。&lt;br /&gt;&lt;br /&gt;VisualStudio2008の場合&lt;br /&gt;Windowsサービスプロジェクトを作成します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__ZiZX_sgyy4/S7XYi8CUe9I/AAAAAAAABHg/YZyMy-jlICA/s1600/WS000000+.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://3.bp.blogspot.com/__ZiZX_sgyy4/S7XYi8CUe9I/AAAAAAAABHg/YZyMy-jlICA/s320/WS000000+.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;サンプルコードとして、1分間隔でイベントログを出力するようにします。&lt;br /&gt;自動で作成される「Service1.vb」にコードを書きます。&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Public Class Service1&lt;br /&gt;&lt;br /&gt;    Private _timer As Timers.Timer&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub OnStart(ByVal args() As String)&lt;br /&gt;        ' サービスを開始するコードをここに追加します。このメソッドによって、&lt;br /&gt;        ' サービスが正しく実行されるようになります&lt;br /&gt;        Me._timer = New Timers.Timer&lt;br /&gt;        Me._timer.Interval = 1000 * 60&lt;br /&gt;        AddHandler Me._timer.Elapsed, AddressOf Timer_Elapsed&lt;br /&gt;        Me._timer.Start()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub OnStop()&lt;br /&gt;        ' サービスを停止するのに必要な終了処理を実行するコードをここに追加します。&lt;br /&gt;        Me._timer.EndInit()&lt;br /&gt;        Me._timer.Dispose()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub Timer_Elapsed(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs)&lt;br /&gt;        EventLog.WriteEntry("Timer_Elapsed")&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;次にインストーラを作成します。&lt;br /&gt;まず、「Service1.vb」のデザイナ上で右クリックし「インストーラの追加」をクリックします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZSORG9HI/AAAAAAAABHw/SKPhOAVOSEs/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZSORG9HI/AAAAAAAABHw/SKPhOAVOSEs/s320/1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「ProjectInstaller.vb」が追加されます。&lt;br /&gt;ServiceInstallerコントロールのServiceNameプロパティを変更します。（サービス一覧に表示される名前です）&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZaPpyYdI/AAAAAAAABH4/3RxOCNJcbCM/s1600/WS000002.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZaPpyYdI/AAAAAAAABH4/3RxOCNJcbCM/s320/WS000002.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;ソリューションにセットアッププロジェクトを追加します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZgmU0nFI/AAAAAAAABIA/YIAyuplzCxU/s1600/WS000003.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZgmU0nFI/AAAAAAAABIA/YIAyuplzCxU/s320/WS000003.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ソリューションエクスプローラで追加したセットアッププロジェクトを右クリックし「追加」→「プロジェクト出力」を選択します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/S7XZoUhg2UI/AAAAAAAABII/EdovGP5Dmoo/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/S7XZoUhg2UI/AAAAAAAABII/EdovGP5Dmoo/s320/4.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「プロジェクトの出力グループの追加」ダイアログより「プライマリ出力」を選択します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/S7XZtUv0IoI/AAAAAAAABIQ/fEPJJA00qQE/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/S7XZtUv0IoI/AAAAAAAABIQ/fEPJJA00qQE/s320/5.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ソリューションエクスプローラで追加したセットアッププロジェクトを右クリックし「表示」→「カスタム動作」を選択します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__ZiZX_sgyy4/S7XZyjeD4CI/AAAAAAAABIY/U_K9FTw3fQI/s1600/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://1.bp.blogspot.com/__ZiZX_sgyy4/S7XZyjeD4CI/AAAAAAAABIY/U_K9FTw3fQI/s320/6.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;表示されたカスタム動作エディタの「カスタム動作」を右クリックし「カスタム動作の追加」を選択します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZ4cVtucI/AAAAAAAABIg/nrftlHa6_Uw/s1600/7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZ4cVtucI/AAAAAAAABIg/nrftlHa6_Uw/s320/7.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;表示される「プロジェクトから項目を選択」ダイアログで「アプリケーションフォルダ」を選択し「OK」をクリックします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZ829fhUI/AAAAAAAABIo/VJcNS6sgKGI/s1600/8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://2.bp.blogspot.com/__ZiZX_sgyy4/S7XZ829fhUI/AAAAAAAABIo/VJcNS6sgKGI/s320/8.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;つづいて表示されるダイアログから「WindowsService1（アクティブ）のプライマリ出力」を選択し「OK」をクリックします。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/S7XaEskiVZI/AAAAAAAABIw/LTnB5iqvvIc/s1600/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/S7XaEskiVZI/AAAAAAAABIw/LTnB5iqvvIc/s320/9.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;カスタム動作エディタの「インストール」、「確定」、「ロールバック」、「アンインストール」のそれぞれにプライマリ出力が追加されます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__ZiZX_sgyy4/S7XaQamTYSI/AAAAAAAABI4/SdIbuzCRBRY/s1600/10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://4.bp.blogspot.com/__ZiZX_sgyy4/S7XaQamTYSI/AAAAAAAABI4/SdIbuzCRBRY/s320/10.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;あとはセットアッププロジェクトをビルドしインストールを実行します。&lt;br /&gt;インストールの途中でユーザー名とパスワードを求められるので、&lt;br /&gt;ユーザ名にコンピュータ名¥ログインユーザ名&lt;br /&gt;パスワードにログインパスワードを入力します。&lt;br /&gt;&lt;br /&gt;インストールが終了したらサービスを起動します。&lt;br /&gt;Vistaの場合&lt;br /&gt;コントロールパネル→管理ツール→サービスを起動し、サービス一覧に表示される「TestService」を開始します。&lt;br /&gt;コントロールパネル→管理ツール→「イベントビューアを起動し、一分間隔でイベントログが出力されていることを確認します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4185057719286842197-8059280534972147705?l=yan-note.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yan-note.blogspot.com/feeds/8059280534972147705/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4185057719286842197&amp;postID=8059280534972147705&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8059280534972147705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4185057719286842197/posts/default/8059280534972147705'/><link rel='alternate' type='text/html' href='http://yan-note.blogspot.com/2010/04/net-windows.html' title='.NET　Windowsサービス'/><author><name>yan</name><uri>http://www.blogger.com/profile/18323500590570943817</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__ZiZX_sgyy4/S7XYi8CUe9I/AAAAAAAABHg/YZyMy-jlICA/s72-c/WS000000+.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4185057719286842197.post-67538564345534088</id><published>2010-03-19T17:39:00.001+09:00</published><updated>2010-03-19T17:41:06.102+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET　LinkLabelのTabStopを表示する</title><content type='html'>LinkLabelのTabStopプロパティはプロパティウインドウにもインテリセンスにも表示されません。&lt;br /&gt;インテリセンスには表示されませんが無視してLinkLabel1.TabStop=Falseとコードで記述すれば、フォーカスされなくなります。&lt;br /&gt;&lt;br /&gt;それでもデザイナで設定したいときはLinkLabelを継承したカスタムコントロールを作成します。&lt;br /&gt;&lt;pre class="vb" name="code"&gt;Imports System.ComponentModel&lt;br /&gt;Public Class CsLinkLabel&lt;br /&gt;    Inherits System.Windows.Forms.LinkLabel&lt;br /&gt;&lt;br /&gt;    Private _TabStop As Boolean = False&lt;br /&gt;&lt;br /&gt;    &amp;lt;DefaultValue(False), Browsable(True), EditorBrowsable(EditorBrowsableState.Always), Category("動作")&amp;gt; _&lt;br /&gt;     Public Shadows Property TabStop() As Boolean&lt;br /&gt;        Get&lt;br /&gt;            Return Me._TabStop&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal value As Boolean)&lt;br /&gt;            Me._TabStop = value&lt;br /&gt;            MyBase.TabStop = Me._TabStop&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs)&lt;br /&gt;        MyBase.OnHandleCreated(e)&lt;br /&gt;        MyBase.TabStop = Me._TabStop&lt;br /&gt;    End Sub&lt;br /&gt;&
