【Java】Android版 日蒙簡易辞書

Android版 日蒙簡易辞書

Android版 日蒙簡易辞書

package net.hinekure.jmdic;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.text.ClipboardManager;
import android.text.SpannableStringBuilder;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;

public class JMDictionary extends Activity {
	/** Called when the activity is first created. */

	private Button button_ok;
	private Button button_cls;
	private EditText text;
	private TextView info;
	private ListView list;
	private Button_OK btok;
	private Button_CLS btcls;
	private ArrayAdapter<String> adapter;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// 各種コンポーネント
		button_ok = (Button) this.findViewById(R.id.button1);
		button_cls = (Button) this.findViewById(R.id.button2);
		text = (EditText) this.findViewById(R.id.editText1);
		info = (TextView) this.findViewById(R.id.textView1);
		list = (ListView) this.findViewById(R.id.listView1);

		text.setOnEditorActionListener(new OnEditorActionListener() {
			@Override
			public boolean onEditorAction(TextView v, int actionId,
					KeyEvent event) {
				if (actionId == v.getImeOptions()) {
					// ENTERされたとき消す
					clsIME(v);
				}
				return true;
			}
		});

		// クリック時
		list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				clsIME(view);
			}
		});

		// リストビューのアイテムがクリックされた時に呼び出されるコールバックリスナーを登録します
		list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
			@Override
			public boolean onItemLongClick(AdapterView<?> parent, View view,
					int position, long id) {
				ListView listView = (ListView) parent;
				// クリックされたアイテムを取得します
				String item = (String) listView.getItemAtPosition(position);
				ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
				// 文字列のコピー
				cm.setText(item);
				return true;
			}
		});

		btok = new Button_OK();
		button_ok.setOnClickListener(btok);
		btcls = new Button_CLS();
		button_cls.setOnClickListener(btcls);

		adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1);
		list.setAdapter(adapter);

		clsList();

	}

	private void clsIME(View v) {
		InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
	}

	private void clsList() {
		adapter.add("日蒙簡易辞書 Ver 1.00");
		adapter.add("ヒント:項目長押しで文字列をクリップボードにコピーします");
		adapter.add("開発:hinekure_inovia\nhttp://twitter.com/hinekure_inovia/");
		adapter.add("辞書データ参考元:");
		adapter.add("モンゴル語実践会話入門 東京外国語大学 アジア・アフリカ言語文化研究所\nhttp://www.aa.tufs.ac.jp/documents/training/ilc/textbooks/2008mongolian.pdf");
		adapter.add("モンゴル 南ゴビ生活:あいさつ\nhttp://nagano53.ojaru.jp/sonota/aisatsu.htm");
	}

	// OKボタン
	private class Button_OK implements OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO 自動生成されたメソッド・スタブ
			InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
			imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

			adapter.clear();

			// 検索するとこーーー
			SpannableStringBuilder ssb = (SpannableStringBuilder) text
					.getText();
			String keywords;
			keywords = ssb.toString();
			Resources res = v.getResources();
			InputStream is = null;
			BufferedReader br = null;

			int result_num = 0;
			try {
				try {
					is = res.openRawResource(R.raw.jmdic);
					br = new BufferedReader(new InputStreamReader(is));
					String str;

					while ((str = br.readLine()) != null) {
						// キーワードに一致 もしくは 空欄の場合
						if ((str.indexOf(keywords) != -1) || (keywords == "")) {
							adapter.add(str);
							result_num++;
						}
					}
					info.setText("" + result_num + "件見つけました!");
				} finally {
					if (br != null)
						br.close();
				}

				if (result_num == 0) {
					adapter.add("検索ヒント:\n別の言い回しで検索すると出る場合があります。\n漢字をひらがなにしたり単漢字で検索しても出る可能性があります。");
				}
			} catch (IOException e) {
				info.setText("読み込みが失敗しました...");
			}

		}

	}

	// clearボタン
	private class Button_CLS implements OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO 自動生成されたメソッド・スタブ
			adapter.clear();
			clsList();
			text.setText("");
			info.setText("キーワードを入力してください!");

		}

	}

}