Android Holo Colors Generatorを使ってみる

Androidのアイコンやテーマの作成をする作業をいろいろやってくれるサイトを見つけた。
ここ。その中でボタンなどの色を変えてくれる「Android Action Bar Style Generator」というものがある。

使い方は色を変えたいコントロールを指定して、色を指定し、下の方にある「DOWNLOAD ZIP」をクリックする。
ダウンロードしたものをAndroidプロジェクトの「res」フォルダに上書きする。セレクターのxmlファイルまで作成してくれるのですごい便利。

これが(標準デザイン)

device-2014-04-21-211048

 

こうなる。

device-2014-04-21-211519

すごく便利です。

androidでDBを使ってみる

DBを使ってみる。androidのDBにはsqliteを使用する。sqlite用にクラスが用意されており、これを使って追加、訂正、削除の簡単なサンプルを作成してみる。

SQLiteOpenHelper

まず「SQLiteOpenHelper」を継承したクラスを作成する。ここでは「DatabaseHelper」とする。
定数「DATABASE_NAME」にデータベース名をセット。実際端末にこの名前でDBが作成される。
定数「DATABASE_VERSION」にはバージョンをセットする。最初に1をセットしておき、バージョンアップ時にこの数字を上げる。上げると、「onUpgrade」メソッドが走るので、ここに列追加やテーブル作成のバージョンアップ時処理を記述する。テーブル作成のsqlは「onCreate」メソッド内に記述する。

今回のサンプルは以下のテーブルで作成する。

列名
_id Integer
Name String

以下ソース
DatabaseHelper.java

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "Database.db";
    public static final int DATABASE_VERSION = 1;
    
    public DatabaseHelper(Context context) {
    	super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
    	// テーブル作成SQL
    	String sql = "CREATE TABLE Sample ("
				+ " _id INTEGER PRIMARY KEY AUTOINCREMENT,"
				+ " Name TEXT"
				+ ");";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

データの追加

データの追加するにはInsert文でもよいと思うが、ここでは「DatabaseHelper 」クラスと「ContentValues」クラスを使用してデータ追加する。
以下ソース

// 項目のセット
ContentValues values = new ContentValues();
values.put("Name", editText.getText().toString());

// DBに追加
DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.insert("Sample", null, values);

データの編集

同様に「DatabaseHelper 」クラスと「ContentValues」クラスを使用してデータ編集する。

// 項目のセット
ContentValues values = new ContentValues();
values.put("Name", editText.getText().toString());

// データの編集
DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.update("Sample", values, "_id = " + id, null);

データの削除

同様に「」クラスを使用してデータを削除する。

DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete("Sample", "_id = " + id, null);

作成したサンプル

今回作成したサンプルは追加、訂正、削除をする簡単なもの。
device-2014-04-07-211101

以下メインのクラス。

import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	private DbSampleListFragment listFragment = new DbSampleListFragment();
	private EditText editText;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		// リストフラグメントのセット
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.add(R.id.fragment_container, listFragment, "list_fragment");
        ft.commit();
        
        // データの追加
        Button btAddData = (Button)this.findViewById(R.id.add_data);
        btAddData.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 入力用EditText
				editText = new EditText(MainActivity.this);
        		editText.setText("");
        		
        		// ダイアログの表示
        		EditTextDialog dialogFragment = EditTextDialog
						.newInstance(R.string.app_name, R.string.dialog_message);
        		dialogFragment.setOnOkClickListener(new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// 項目のセット
						ContentValues values = new ContentValues();
						values.put("Name", editText.getText().toString());
						
						// DBに追加
						DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this);
						SQLiteDatabase db = databaseHelper.getWritableDatabase();
						db.insert("Sample", null, values);
						
						Toast.makeText(MainActivity.this, "データを追加しました。", Toast.LENGTH_SHORT).show();
						
						listFragment.setListView();
					}
				});
				dialogFragment.setEditText(editText);
        		dialogFragment.show(getFragmentManager(), "dialog_fragment");
			}
		});
	}

	// データの編集
	public void onListItemEdit(final int id, String name) {
		// 入力用EditText
		editText = new EditText(MainActivity.this);
		editText.setText(name);
		
		// ダイアログの表示
		EditTextDialog dialogFragment = EditTextDialog
				.newInstance(R.string.app_name, R.string.dialog_message);
		dialogFragment.setOnOkClickListener(new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// 項目のセット
				ContentValues values = new ContentValues();
				values.put("Name", editText.getText().toString());
				
				// データの編集
				DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this);
				SQLiteDatabase db = databaseHelper.getWritableDatabase();
				db.update("Sample", values, "_id = " + id, null);
				
				Toast.makeText(MainActivity.this, "データを編集しました。", Toast.LENGTH_SHORT).show();
				
				listFragment.setListView();
			}
		});
		dialogFragment.setEditText(editText);
		dialogFragment.show(getFragmentManager(), "dialog_fragment");
	}
	
	// データの削除
	public void onListItemDelete(int id) {
		DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this);
		SQLiteDatabase db = databaseHelper.getWritableDatabase();
		db.delete("Sample", "_id = " + id, null);
		
		Toast.makeText(MainActivity.this, "データを削除しました。", Toast.LENGTH_SHORT).show();
		
		listFragment.setListView();
	}
}

今回作成したサンプルプロジェクト
DBSample