Androidアプリ作成日記

プログラミング初心者が、Androidアプリを作ります

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

  1. --/--/--(--) --:--:--|
  2. スポンサー広告

家計簿アプリその10、カレンダー機能

さてさて、ではカレンダー機能を作ります。
色々ググったりしましたが、あんまりサンプルのカレンダーアプリが出てきません。
なのでとりあえず自分で考えてみました。
まずはボタンを6×7=42個作りました。これは、列は月~日の7列で、
行は最大で6行になるため、42個作りました。



まずonCreateメソッド内に、
button_table[1] = (Button)this.findViewById(R.id.hiduke_button1);
button_table[2] = (Button)this.findViewById(R.id.hiduke_button2); 
・
・
button_table[42] = (Button)this.findViewById(R.id.hiduke_button42); 

for(int i=1;i<=42;i++){
        button_table[i].setOnClickListener(this);
        }

って感じで、コンポーネントと、クリック処理をまず42個むりやり作ってしまいました。
クリック処理の方はfor文ですんなり42個作れましたが、コンポーネントはidが必要で
for文が出来なかったため、地道に42行文コピペして作りました。
xmlファイルの方にもこれに準じてレイアウトを設定しました。

次に、これらのボタンに文字をふります。まずActivityクラスにメンバ変数(どのメソッドからも使える変数)として、
Calendar calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    int dayOfWeek =calendar.get(Calendar.DAY_OF_WEEK);
とやって、現在の日付を取得します。dayOfWeekってのは曜日です。
次に、onCreateメソッド内に、
calendar.set(year,month,1);
        day=calendar.get(Calendar.DAY_OF_MONTH);
        dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        //日1,月2,・・・土7
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DATE, -1);
        int lastDate = calendar.get(Calendar.DATE);
		for(int i=dayOfWeek;i<=dayOfWeek+lastDate-1;i++){
			button_table[i].setText(String.valueOf(day));
			button_table[i].setTextSize(15);
			day=day+1;
とします。1行目のcalendar.setメソッドで日付を指定日に設定する事が出来、
2~3行目で現在の月の初日の日付(1日)と曜日を取得します。
つまり、dayは1日、dayOfWeekはその時の曜日になるわけですが、曜日は日曜が1で、月曜が2、
火曜が3と続き、土曜が7という数が入ります。
5~7で、月末の日付を設定します。calendar.addメソッドで、日付に数字を加えます。
5行目は、設定した日付のMONTH(月)に1を足す、つまり来月の1日に設定し、
6行目で、設定した日付(来月の1日)のDATE(日)から1を引く、今月の末日に設定されます。
7行目で、この末日をlastDateという変数に入れます。
8~11行目のfor文は、dayOfWeekは今月初日の曜日で、5なら5番目から始める、という意味です。
これを最終日まで日付を設定します。
2011-3-21-1
こんな感じでうまく行きました。次に、上の矢印(button[2])を押した時のクリック処理を書きます。
public void onClick(View v) {
if (v==button[2]){
    		if(month==0){
    			year=year-1;
    			month=11;
    		}
    		else{
    			month=month-1;
    		}
    		text1.setText(String.valueOf(String.valueOf(year+"年"+(month+1)+"月")));
            calendar.set(year,month,1);
            day=calendar.get(Calendar.DAY_OF_MONTH);
            dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            calendar.add(Calendar.MONTH, 1);
            calendar.add(Calendar.DATE, -1);
            int lastDate = calendar.get(Calendar.DATE);
            calendar.set(year,month,1);
            //日1,月2,・・・土7
            for(int i=1;<dayOfWeek;i++)
                {
            	button_table[i].setText("");
            }
    		for(int i=dayOfWeek;i<=dayOfWeek+lastDate-1;i++){
    			button_table[i].setText(String.valueOf(day));
    			button_table[i].setTextSize(15);
    			day=day+1;
    		}
    		for(int i=dayOfWeek+lastDate;i<=42;i++){
    			button_table[i].setText("");
    		}
    	}
3行目のmonth=0のとき、というのは、monthは+1で表示されるため、1月の時、という意味です。
もし今が1月なら、monthを11(12月)にして、yearを1引く処理をします。
それ以外の月なら普通にmonthから1を引きます。こうやって、前の月に戻る処理をします。
で、これをtext1.setTextでタイトルに設定して、あとはカレンダーにも設定するように、
さっき書いたのと同じコードをコピペします。さっきと少し違うのは、初日より前のボタンと、
末日より後のボタンには空白文字を入れる点です。こうしないと文字がだぶってしまいました。
で、これは後ろ矢印(←)のボタンの処理ですが、前矢印(→)も同じ感じで書きます。
それで何回か押してみました。
2011-3-21-2
日付移行がちゃんとできてます。これで形式上はカレンダーっぽくなりましたが、 クリック処理が全然出来てませんので、次回はそれをやります。


Androidアプリ開発ランキング

  1. 2011/03/21(月) 19:07:14|
  2. 家計簿アプリ
  3. | トラックバック:0
  4. | コメント:0
<<家計簿アプリその11、カレンダー・クリック処理 | ホーム | クラスの名前>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://andromaker.blog98.fc2.com/tb.php/51-94fbf62f
この記事にトラックバックする(FC2ブログユーザー)


カテゴリ

家計簿アプリ (15)
アプリ作成 (練習) (7)
プログラム用語 (1)
エラー (3)
環境設定 (8)
サイト関連 (3)
雑談 (9)
ニュース (1)
未分類 (2)
書籍紹介 (1)
iPhone (1)

Android書籍

スマートにプログラミング
Android入門編


初歩からわかるAndroid
最新プログラミング


Google Android
プログラミング入門


AndroidアプリUIデザイン
&プログラミング


Android SDK
逆引きハンドブック

月別アーカイブ

最新コメント

最新トラックバック

最新記事

RSSリンクの表示

カウンター

アクセスランキング

アクセスランキング

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。