Androidプログラミング日記 (仮)  

メモ帳(完成版)

あなたは

人目のプログラマーだよ。

Androidプログラミング日記 (仮).

 

 

 

 

メモ帳(完成版)

前回きになっていた箇所がきになって眠れないので、しっかりアプリとして作成してみました。ソース的には、TOP画面の最新メモ表示を改行で表示可能に、オプションメニューからヘルプの観覧、おまけでアイコンの設定をしました。改良箇所は少ないので、改良ファイルだけ載せることにしますね。前回のメモ帳と見比べて見てください

 

 

追加使用画像

メモ帳完成版

アイコンの設定ですが、drawable-hdpiに入れます。AndroidManifest.xmlのandroid:icon="@drawable/xxx"の”xxx”の箇所をアイコンのファイル名にしましょう。

ちなみにdarawableフォルダは3つあり、

drawable-hdpiは72×72  drawable-mdpiは48×48  drawable-ldpiは38×38 のサイズのアイコンを入れておくみたいです。今回は72×72なのでdrawable-hdpiに入れています。

まずはオプションメニューの表示系コードから

ファイル名「MemoActivity.java」長いので変更箇所のみにしますね。メソッドは一番下に追加しただけです。

//メニューボタンを押すと、セットされたメニューを表示
    public boolean onCreateOptionsMenu(Menu menu){
    	super.onCreateOptionsMenu(menu);

    	//引数はグループID、アイテムID、優先順位、アイテムタイトルです
    	MenuItem item0 = menu.add(0,MENU_ITEM0,0,R.string.option_help);
    	return true;
    }

    //オプションメニューからアイテムをタップした時の処理
    public boolean onOptionsItemSelected(MenuItem item){
    	if(item.getItemId() == MENU_ITEM0){
    		setContentView(R.layout.memoshelp);
    		return true;
    	}

    	return true;

    }
    //ヘルプ画面でタップした時の処理
    public void setMainView(){setContentView(R.layout.main);}
						

ファイル名「String.xml」

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">メモ帳</string>
    <string name="dai_dai">現在日時:</string>
    <string name="dai_title">タイトル:必須</string>
    <string name="dai_naiyou">内容:必須</string>
    <string name="btn_save">保存</string>
    <string name="btn_buck">戻る</string>
    <string name="btn_del">このメモを消去</string>
    <string name="btn_save2">このメモを保存</string>
    <string name="btn_buck2">何もせず戻る</string>
    <string name="option_help">「メモ帳」のヘルプとホムペ紹介</string>

</resources>
						

ファイル名「memoshelp.xml」

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <and.roid.memo.MemoHelp
    android:id="@+id/HelpView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />


</LinearLayout>
						

ファイル名「MemoHelp.java」

/*
 * ヘルプ用の表示クラス
 */

package and.roid.memo;


import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class MemoHelp extends View{
	private MemoActivity memoAc;
	private Mesod mesod;
	private float disp_w,disp_h;
	private Drawable buck;
	public MemoHelp(Context context) {
		super(context);
		initMemo(context);
	}
	public MemoHelp(Context context, AttributeSet attrs) {
		super(context,attrs);
		initMemo(context);
	}
	public void initMemo(Context context){
		memoAc = (MemoActivity)context;
		mesod = new Mesod();
		disp_w = memoAc.disp_w;
		disp_h = memoAc.disp_h;
		Resources resources = context.getResources();
		Bitmap bimg = BitmapFactory.decodeResource(resources,R.drawable.helpmemo2);
		buck = new BitmapDrawable(
				Bitmap.createBitmap(bimg,0,0,bimg.getWidth(),bimg.getHeight()));
		buck.setBounds(0, 0, mesod.setSizeX(disp_w, 480), mesod.setSizeY(disp_h, 854));

		memoAc.makeTost("画面タッチで戻ります");
	}
	protected void onDraw(Canvas c) {
		buck.draw(c);
	}

	//タップ処理
	public boolean onTouchEvent(MotionEvent event){
		int action = event.getAction();
		int x = (int)event.getX();
		int y = (int)event.getY();
		switch(action){
		case MotionEvent.ACTION_UP:
			memoAc.setMainView();
			break;
		}

		invalidate();
		return true;
	}
}

						
 

ここの改良点として、オプションメニューの実装です。String.xmlファイルにも追加で

<string name="option_help">「メモ帳」のヘルプとホムペ紹介</string>

と追加をしています。オプションメニューのアイテムは一つだけです。ViewをextendsしたMemoHelp.javaは内容的にMemo1View.javaとほぼ同じです。ヘルプ用画像を表示し、画面をタップすればTOP画面に戻ります。

ヘルプ画面レイアウトの表示方法も、Memo1Viewクラスと同じで、xmlレイアウトファイルを呼び出せば表示できるようになっています。

次はTOP画面なのですが、ここも変更点だけ

 

ファイル名「Memo1View.java」内「onDrawメソッド」


protected void onDraw(Canvas c) {
		buck.draw(c);

		Paint p = new Paint();

		if(memoAc.getMemokazu() != 0){
			p.setColor(Color.WHITE);
			p.setTextSize(30);
			c.drawText(""+obj.getTitle(), 147, 488, p);
			c.drawText(""+obj.getDay(), 168, 554, p);
			String str = obj.getMemo();
			List <String> memo = new ArrayList<String>();
			if(str.length() >0 && str.length() < 12){
				memo.add(str.substring(0, str.length()));
			}
			if(str.length() >13 && str.length() < 25){
				memo.add(str.substring(0, 13));
				memo.add(str.substring(14, str.length()));
			}
			if(str.length() > 26 && str.length() < 38){
				memo.add(str.substring(0, 13));
				memo.add(str.substring(13, 26));
				memo.add(str.substring(26, str.length()));
			}

			if(str.length() > 39){
				memo.add(str.substring(0, 13));
				memo.add(str.substring(13, 26));
				memo.add(str.substring(26, 39));
				if(str.length() > 52){
					memo.add(str.substring(39, 52));
				}else{
					memo.add(str.substring(39, str.length()));
				}
			}
			for(int i= 0;i<memo.size();i++){
			p.setTextSize(30);
			c.drawText(""+memo.get(i), 33, 662+50*i, p);
			}
		}

	}
						
 

ふふ、、我ながら力技だなぁと感心しています;;

日時を表示させるまでは同じなのですが、ここからまずメモ内容をString変数strに入れます。メモのテキストの長さはいくつになるかわからないのでString値を持つList変数をここで設定。ここで新しいコードを

str.substring(0, str.length())の部分です。

strはメモ内容のテキストですね。引数は2つ。strのテキストの何番目の文字から何番目の文字までを取り出す

というメソッドです。最初のif文は0番目からstr.lengthでstrの長さ、いわゆる最後までとりだします。

だいたいテキストサイズ30では4行でいっぱいになるので、はみだした文字は表示させないようにしています。

もちっとでも考えればコード数も減らせれると思うのですが、動きましたしね・・;;

 

こんな感じでこのメモ帳は完了終了としました。

しっかりしたアプリにしたのはこれが最初ですね。結局どんなアプリもコードの張り合わせで作成されていますので、やりたいコードをどこかから持ってきて自分のアプリで動くように改造して・・・の繰り返しのようなきがします。明確な最終目標があり、作成するにつれて壁にぶつかり、動いたら感動して、また壁にぶつかり・・・のアメとムチの果てにアプリの完成までたどりついた達成感はなかなか快感です。

調子に乗って記念にマーケットに登録してみました。

androidマーケット「SIMPLEメモ帳」

みなさんも一緒に何かつくって遊びましょう!

 

 

 

Androidプログラミング日記 (仮) | サイトマップ | 個人情報保護方針 | 応援メールテヘペロ | ©2012 Japan  相互リンク大募集中です