Androidでcountdownを作ってみよう2
GUI を設定するにはレイアウトを受け持つクラスを使って
文字エリア(ラベル/TextView)や、ボタンなどの
GUI部品(Widgets)を配置します。
こんにちは、当サイト管理人のイガジーです。
Java AWT の場合は、BorderLayout や GridLayout などが
ありますが、Android の場合は LinearLayout や Relative
Layout などを使う事が多いようです。
AndroidStudio でプロジェクトを作る時、Empty Activity を
選ぶと activity_main.xml には Relative Layout が使われて
TextView が1つ設定されます。
(AndroidのHelloWorldを参照)
Log.d()で、LogCatエリアに表示していた文字列を
TextViewに表示するには、このTextView に setText()
すれば良いのですが、「このTextView」を指定するには
TextViewにid(識別子)を割り振る必要があります。
具体的には android:id="@+id/tv" を追加して
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
にします。
※ android:text="Hello World!" の行は削除してもよいのですが
編集前との対比が分かりやすいように残しています。
※ @+id/tv の tv が id 名で、他とダブらなければ何でも
(text1でもlabelでもtttでも)かまいません。
そして、MainActivity.java の方では
TextView tvn=(TextView)findViewById(R.id.tv);
と書いて、そのid(R.id.tv)を探して tvn に割り当てます。
これは TextView tvn=new TextView(this); に相当します。
※ new TextView(this)とした場合は、レイアウト上に
突っ込む(addView()する)処理が必要になります。
tvn(インスタンス)が生成できたら
tvn.addText(“ほげ”); とすれば、Android(エミュレータ)
画面の hello world! の部分が ほげ になります。
そんな訳で、前回の処理で cyy や cmm を取得した次に
String str="今日は"+cyy+"年"+(cmm+1)+"月"+cdd+"日";
tvn.setText(str);
とすれば、今日の年月日が Hello World! の代わりに表示されます。
「あとdd日とhh時間」も表示させるようにした例を
掲載しておきます。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ここからカウントダウンの処理
final long MS2HOUR=1000*60*60;
Calendar c=Calendar.getInstance();
int cyy=c.get(Calendar.YEAR);
int cmm=c.get(Calendar.MONTH);
int cdd=c.get(Calendar.DAY_OF_MONTH);
long ms=c.getTimeInMillis();
String str="今日は"+cyy+"年"+(cmm+1)+"月"+cdd+"日";
Calendar d=Calendar.getInstance();
d.set(cyy+1,0,1,0,0,0);
long mst=d.getTimeInMillis()-ms;
int hh=(int)(mst/MS2HOUR);
// Log.d("TAG","今年は、あと"+hh+"時間");
int dd=hh/24;
int rh=hh%24;
str+="¥n今年は、あと"+dd+"日と"+rh+"時間";
Log.d("TAG",str);
TextView tvn=(TextView)findViewById(R.id.tv);
tvn.setText(str);
} // onCreate()
}// class MainActivity()
※ ¥n はフォントによっては \n で、改行の指定です。
この記事へのコメントはこちら