実行後、現在の時刻を表示します。 アプリがアクティブになった場合にも、その時の現在の時刻を表示しますMainActivity.java
package app.lightbox.winofsql.jp.whattime; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class MainActivity extends Activity { // ************************************* // 自動作成( onCreate ) // ************************************* @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("lightbox", "開始"); } // ************************************* // CTRL + O から追加( onStart, onStop, onPause ) // ************************************* @Override protected void onStart() { super.onStart(); TimeZone tz = TimeZone.getTimeZone("Asia/Tokyo"); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("HH'時'mm'分'ss'秒'"); sdf.setTimeZone(tz); String time = sdf.format(date); Log.i("lightbox", time); TextView tv = (TextView) this.findViewById(R.id.text); tv.setText(time); } @Override protected void onStop() { super.onStop(); Log.i("lightbox", "画面が切り替わりました"); } @Override protected void onPause() { super.onPause(); Log.i("lightbox", "画面が切り替わろうとしています"); } // ************************************* // 自動作成( onCreateOptionsMenu ) // ************************************* @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } // ************************************* // 自動作成( onOptionsItemSelected ) // ************************************* @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { Log.i("lightbox", "メニュー"); // 第二画面へ移動 Intent intent = new Intent(MainActivity.this, NextPage.class); startActivity(intent); return true; } return super.onOptionsItemSelected(item); } }
TimeZone エミュレータで、TimeZone.getDefault() は正しい時間がとれませんでした。確実に、『Asia/Tokyo』を指定するのが良いと思います。 onStart onCreate では、アプリの開始時にしか実行されないので画面が切り替わって戻って来た時にもその時点での時間を表示する為に、onStart で実行しています。 Activity のライフサイクル( Android Developers ) 画面の切り替えは、エミュレータのコントロールで出来ますが、内部のメニューから次の画面に遷移するようにして状況を確認できるようにしています。次画面は、Activity を継承したクラスの onCreate で初期画面( 元々のHello World ) を表示しています。 Activity の追加( AndroidManifest ) その為に必要な Activity の定義は、AndroidManifest にも追加しています。その際の入力は、Android Studio が、.NextPage を候補として表示してくれました。 Override Override するメソッドは、必要なところにカーソルを置いて、CTRL + O でダイアログが表示されるので、とても便利です。 Project Structure Min SDK Version と Max SDK Version は同じで一番新しいものを、プロジェクト作成時に指定しています。ただ、これの影響でスキンのタイトルが白くなるので、styles.xml( v21 ) の内容を変更しています。
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar"> </style> </resources>
画面の TextView
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/text" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textSize="40dp" android:textColor="#ff000000"/> </RelativeLayout>
プロジェクト作成時の HelloWorld をそのまま使っていますが、テキストを中央に表示する為に、以下のプロパティで both を指定します。 あとは、テキストサイズと、テキストの色と id をプロパティから変更しています