Androidアプリ開発パーフェクトマスター - 3日目
Chapter 8
続き。ソース貼り付けはほどほどに。
- Spinner
今回は難しい。getResource、Adapter。
package com.myexample.chapter8_2_2_1.app; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Spinner spinner = (Spinner) findViewById(R.id.spinner); String[] labels = getResources().getStringArray(R.array.item_label); ArrayAdapter<String> adapter = new ArrayAdapter<String>( this, android.R.layout.simple_spinner_item, labels ); adapter.setDropDownViewResource(android.R.layout.simple_spinner_item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int positoin, long id) { TextView item = (TextView) view; ((TextView) findViewById(R.id.textView)).setText( String.format("[%s]が選択されています。", item.getText()) ); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } } ); } }
- 画面タッチでメニューを表示して項目選択
currentViewフィールド変数は不要。
またonCreate内でtextViewを割当する。
package com.myexample.chapter8_2_3.app; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; public class MainActivity extends ActionBarActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); registerForContextMenu((View)findViewById(R.id.layoutView)); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { getMenuInflater().inflate(R.menu.menu1, menu); } public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item01: textView.setText(R.string.context01); return true; case R.id.item02: textView.setText(R.string.context02); return true; case R.id.item03: textView.setText(R.string.context03); return true; case R.id.item04: textView.setText(R.string.context04); return true; default: return super.onContextItemSelected(item); } } }
- 時計とタイマー
package com.myexample.chapter8_3.app; import android.os.SystemClock; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Chronometer; import android.widget.Button; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer); ((Button) findViewById(R.id.start_button)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { chronometer.setBase(SystemClock.elapsedRealtime()); chronometer.start(); } } ); ((Button) findViewById(R.id.stop_button)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { chronometer.stop(); } } ); ((Button) findViewById(R.id.reset_button)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { chronometer.setBase(SystemClock.elapsedRealtime()); chronometer.stop(); } } ); } }
Chapter 9 ダイアログボックスを利用する
- アラートダイアログの表示
P.525の new AlertDialog.Builder(getApplication())ではだめ。
Activity名.thisじゃないと。
getApplicationContext()でもだめなのは、スコープが違うから取れないってことなのかな。
AlertDialog.Builder | Android Developers
Context | Android Developers
package com.myexample.chapter9_1_1_1.app; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ((Button) findViewById(R.id.button)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { new AlertDialog.Builder(MainActivity.this) .setTitle("Alert Dialog OK") .setMessage("OKボタンをクリックしてください") .setIcon(R.drawable.ic_launcher) .setPositiveButton( "OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ((TextView) findViewById(R.id.textView)) .setText("OKボタンがクリックされました"); } } ).show(); } } ); } }
- YES/NEUTRAL/NO
メソッドの記述順は関係無く、NO/NEUTRAL/YESになるようだ。
package com.myexample.chapter9_1_1_2.app; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ((Button) findViewById(R.id.button)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { final TextView textView = (TextView)findViewById(R.id.textView); new AlertDialog.Builder(MainActivity.this) .setTitle("Alert Dialog") .setMessage("ボタンをクリックしてください") .setPositiveButton( "YES", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { textView.setText("YESボタンがクリックされました。"); } } ) .setNeutralButton( "NEUTRAL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { textView.setText("NEUTRALボタンがクリックされました。"); } } ) .setNegativeButton( "NO", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { textView.setText("NOボタンがクリックされました。"); } } ).show(); } } ); } }
- 連続してダイアログを出す
package com.myexample.chapter9_1_1_3.app; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends ActionBarActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.VERTICAL); setContentView(linearLayout); textView = new TextView(this); textView.setText("ボタンをクリックしてください。"); linearLayout.addView(textView); Button button = new Button(this); button.setText("Button"); button.setLayoutParams( new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT ) ); button.setOnClickListener(new SampleClickLinster()); linearLayout.addView(button); } class SampleClickLinster implements View.OnClickListener { @Override public void onClick(View view) { new AlertDialog.Builder(MainActivity.this) .setTitle("Alert Dialog") .setMessage("ボタンをクリックしてください。") .setPositiveButton( "YES", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { new AlertDialog.Builder(MainActivity.this) .setTitle("確認") .setMessage("[OK]ボタンがクリックされました。") .setPositiveButton("OK", null) .show(); } } ) .setNegativeButton("NO", null) .show(); } } }
- リスト形式のダイアログ
package com.myexample.chapter9_1_2.app; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends ActionBarActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); ((Button) findViewById(R.id.button)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { final CharSequence[] colors = {"RED", "BLUE", "YELLOW"}; new AlertDialog.Builder(MainActivity.this) .setTitle("カラーを選択してください。") .setItems( colors, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { textView.setText( String.format( "%s が選択されました。", colors[i] ) ); } } ).show(); } } ); } }
package com.myexample.chapter9_1_3.app; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ((Button) findViewById(R.id.button)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { final CharSequence[] items = {"RED", "BLUE", "YELLOW"}; new AlertDialog.Builder(MainActivity.this) .setTitle("カラーを選択してください。") .setSingleChoiceItems( items, -1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ((TextView) findViewById(R.id.textView)).setText( String.format( "%s が選択されました。", items[i] ) ); } } ) .setPositiveButton( "OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } } ).show(); } } ); } }
- チェックボックス型アラートダイアログ
package com.myexample.chapter9_1_4.app; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends ActionBarActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); ((Button) findViewById(R.id.button)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { textView.setText( String.format( "Green = false%nBlue = false%n" + "Red = false%nYellow = false%n" + "Purple = false" ) ); final CharSequence[] items = { "Green", "Blue", "Red", "Yellow", "Purple" }; final boolean[] checkedItems = { false, false, false, false, false }; new AlertDialog.Builder(MainActivity.this) .setTitle("Pick a color") .setMultiChoiceItems( items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i, boolean b) { checkedItems[i] = b; textView.setText( String.format( "Green = %s%n" + "Blue = %s%n" + "Red = %s%n" + "Yellow = %s%n" + "Purple = %s%n", checkedItems[0], checkedItems[1], checkedItems[2], checkedItems[3], checkedItems[4] ) ); } } ) .setPositiveButton( "OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } } ).show(); } } ); } }
- オリジナルのダイアログ
package com.myexample.chapter9_1_4.app; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends ActionBarActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); ((Button) findViewById(R.id.button)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { textView.setText( String.format( "Green = false%nBlue = false%n" + "Red = false%nYellow = false%n" + "Purple = false" ) ); final CharSequence[] items = { "Green", "Blue", "Red", "Yellow", "Purple" }; final boolean[] checkedItems = { false, false, false, false, false }; new AlertDialog.Builder(MainActivity.this) .setTitle("Pick a color") .setMultiChoiceItems( items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i, boolean b) { checkedItems[i] = b; textView.setText( String.format( "Green = %s%n" + "Blue = %s%n" + "Red = %s%n" + "Yellow = %s%n" + "Purple = %s%n", checkedItems[0], checkedItems[1], checkedItems[2], checkedItems[3], checkedItems[4] ) ); } } ) .setPositiveButton( "OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } } ).show(); } } ); } }
今日の感想
どの時にどのメソッドを使うのか、これは経験していくうちに覚えていくしかないのかな。
だんだん難しくなってきて、進みが遅くなってしまっている。
ただ、書いたものが動く、というのは楽しい。