Android 간단 한 전자 사전 구현

7658 단어 Android
AutoComplete TextView 를 사용 하면 사전 데 이 터 는 소형 데이터베이스 sqlite 에 저장 되 며, res 의 raw 폴 더 에서 변경 프로그램 을 실행 하면 자동 으로 휴대 전화 내 장 된 SD 카드 에 복 사 됩 니 다.
로 컬 전자 사전 은 데이터베이스 에 저장 되 어 있 으 며, 원본 파일 코드 는http://download.csdn.net/detail/bq1073100909/8079045
SD 카드 에 대한 읽 기와 쓰기 권한 추가:


MainActivity.java
package org.dyb.activity;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.TextView;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class MainActivity extends Activity implements OnClickListener,
		TextWatcher {
	//           
	 private final String DATABASE_PATH = android.os.Environment
			 .getExternalStorageDirectory().getAbsolutePath() + "/dictionary";
	//        
	private AutoCompleteTextView word;
	//         
	private final String DATABASE_FILENAME = "dictionary.db";
	private SQLiteDatabase database;
	private Button searchWord;
	//         
	private TextView showResult;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//      
		database = openDatabase();
		searchWord = (Button) findViewById(R.id.searchWord);
		word = (AutoCompleteTextView) findViewById(R.id.word);
		//      
		searchWord.setOnClickListener(this);
		word.addTextChangedListener(this);
		showResult = (TextView) findViewById(R.id.result);
	}

	public class DictionaryAdapter extends CursorAdapter {
		private LayoutInflater layoutInflater;

		public DictionaryAdapter(Context context, Cursor c, boolean flags) {
			super(context, c, flags);
			layoutInflater = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		}

		@Override
		public CharSequence convertToString(Cursor cursor) {
			return cursor == null ? "" : cursor.getString(cursor
					.getColumnIndex("_id"));
		}

		//       
		@Override
		public View newView(Context context, Cursor cursor, ViewGroup parent) {
			View view = layoutInflater.inflate(R.layout.word_list_item, null);
			setView(view, cursor);
			return view;
		}

		//         
		@Override
		public void bindView(View view, Context context, Cursor cursor) {
			setView(view, cursor);
		}

		//            
		private void setView(View view, Cursor cursor) {
			TextView tvWordItem = (TextView) view;
			tvWordItem.setText(cursor.getString(cursor.getColumnIndex("_id")));
		}

	}

	//      
	private SQLiteDatabase openDatabase() {
		try {
			//   dictionary.db       
			String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
			File dir = new File(DATABASE_PATH);
			//        ,       
			if (!dir.exists()) {
				dir.mkdir();
			}
			//    /sdcard/dictionary      
			// dictionary.db  ,  res\raw          
			// SD    (/sdcard/dictionary)
			if (!(new File(databaseFilename)).exists()) {
				//     dictionary.db   InputStream  
				InputStream is = getResources().openRawResource(
						R.raw.dictionary);
				FileOutputStream fos = new FileOutputStream(databaseFilename);
				byte[] buffer = new byte[8192];
				int count = 0;
				//     dictionary.db  
				while ((count = is.read(buffer)) > 0) {
					fos.write(buffer, 0, count);
				}
				//      
				fos.close();
				is.close();
			}
			//   /sdcard/dictionary    dictionary.db  
			SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
					databaseFilename, null);
			return database;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public void onClick(View v) {
		//        
		String sql = "select chinese from t_words where english=?";
		Cursor cursor = database.rawQuery(sql, new String[] { word.getText()
				.toString() });
		String result = "      .";
		//       ,        
		if (cursor.getCount() > 0) {
			//     moveToFirst           1      
			cursor.moveToFirst();
			result = cursor.getString(cursor.getColumnIndex("chinese"))
					.replace("&", "&");
		}
		//       TextView 
		showResult.setText(word.getText() + "
" + result.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { // english _id Cursor cursor = database.rawQuery( "select english as _id from t_words where english like ?", new String[] { s.toString() + "%" }); // Adapter DictionaryAdapter dictionaryAdapter = new DictionaryAdapter(this, cursor, true); // word.setAdapter(dictionaryAdapter); } }

레이아웃 파일:
activity_main.xml


    
    
         
            
        
		
        

word_list_item.xml



strings.xml


      
    Settings
    Hello world!
	  
	    

좋은 웹페이지 즐겨찾기