【Android】SurfaceView上でCanvasに描画する文字列の幅を取得する

SurfaceView上でCanvasに描画する前に文字列の幅を取得する方法。
取得するにはPaintクラスのmeasureText()メソッドを利用する。

【SampleSurfaceView.java】

public class SampleSurfaceView11 extends SurfaceView implements SurfaceHolder.Callback{
	
    // 描画用
	Paint paint = null;
    
    String put_txt = "文字列の横幅を取得";
    
	public SampleSurfaceView11(Context context) {
		super(context);
		
		getHolder().addCallback(this);
		paint = new Paint();
	}
	
	public void surfaceCreated(SurfaceHolder holder) {
		
		Canvas canvas = holder.lockCanvas();
		canvas.drawColor(Color.BLACK);
		paint.setColor(Color.WHITE);
		paint.setTextSize(30);
		
		// テキストの幅を取得する
		float testWidth = paint.measureText(put_txt);
		
		canvas.drawText(put_txt, 0, paint.getTextSize(), paint);
		canvas.drawText("テキスト幅は" + testWidth + "px です", 0, paint.getTextSize()*3, paint);
		
		holder.unlockCanvasAndPost(canvas);
	}
	
	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

	}
    
	public void surfaceDestroyed(SurfaceHolder holder) {

	}
}

【Activity000.java】

public class Activity000 extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// アクティビティにビューを追加する
		setContentView(new SampleSurfaceView(this));
	}
}

【出力結果】
Canvasに描画する文字幅を取得

measureText()メソッドで文字列(テキスト)の幅を取得できる

【Android】画面の向きを固定(回転しない)

Androidアプリでは通常、端末を横にすると横画面に、縦にすると縦画面になります。
レイアウトやデザイン上、端末を回転させても画面を回転させたくない場合は画面を固定します

【縦向きに画面を固定(AndroidManifest.xmlで指定)】

<activity
	android:label="@string/app_name"
	android:name=".Activity01"
	android:screenOrientation="portrait">
</activity>

【横向きに画面を固定(AndroidManifest.xmlで指定)】

<activity
	android:label="@string/app_name"
	android:name=".Activity01"
	android:screenOrientation="landscape">
</activity>

【縦向きに画面を固定(Activityで指定)】

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

	// 縦向きに画面を固定
	this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

【横向きに画面を固定(Activityで指定)】

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

	// 横向きに画面を固定
	this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

動的に指定する場合はプログラム上で処理する

【Android】プリファレンスを利用してデータを簡単に保存する

Androidアプリ開発で、データを保存する方法はいくつかある。

データを保存・利用するには「SQLite」などのデータベースを使用するのが一般的であるが、データベースを使うまでもない事もある。
そういった場合、Androidでは「プリファレンス」というキー名と値の組合わせから構成されるデータをXML形式で保存する機能がある。

保存できるデータは、boolean型、float型、int型、long型、String型のみ。

今回は、このプリファレンスを利用してデータを簡単に保存し、出力してみる。

【値を保存】

// オブジェクトを取得 getSharedPreferences("プリファレンス名", 共有モード);
SharedPreferences pref_in = getSharedPreferences("prefname", MODE_PRIVATE);
// エディターオブジェクト生成
Editor editor = pref_in.edit();
// プリファレンスファイルへの書き込み putString("キー名", "データ")
editor.putString("keyname", "data");
// commit()メソッドの実行で値を保存
editor.commit();

【保存データを取得】

// オブジェクトを取得 getSharedPreferences("プリファレンス名", 共有モード);
SharedPreferences pref_out = getSharedPreferences("prefname", MODE_PRIVATE);
// プリファレンスファイルからデータを取得 putString("キー名", "データ")
String str = pref_out.getString("keyname", "data");

【利用例】

public class Activity000 extends Activity {
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// 値を保存
		SharedPreferences pref_in = getSharedPreferences("name", MODE_PRIVATE);
		Editor editor = pref_in.edit();
		editor.putString("key1", "001");
		editor.putString("key2", "あいうえお");
		editor.commit();
		
		// 保存データを取得
		SharedPreferences pref_out = getSharedPreferences("name", MODE_PRIVATE);
		String str1 = pref_out.getString("key1", "default");
		String str2 = pref_out.getString("key2", "default");
		
		// データを出力
		Toast.makeText(getBaseContext(), str1, Toast.LENGTH_SHORT).show();
		Toast.makeText(getBaseContext(), str2, Toast.LENGTH_SHORT).show();
	}
}

【出力結果】

Preferences