2014年5月29日木曜日

AndroidのSpinnerを使う

目次へ



次の3点について、書きます。
  • Spinnerの表示項目をリソースファイルだけで設定する方法
  • 表示項目をプログラムで動的に作成する方法
  • 選択された時のリスナ


■■■■リソースだけで表示項目を設定する方法■■■■

まずプロンプト(項目の上に表示する文字列)と選択項目とをres/values/strings.xmlにstringとstring-arrayとして登録しておきます。
ただ、なぜか、プロンプトがどうしても表示されませんでした。
その理由がわかったら、ここに追加します。


<string name="prompt">項目を選択してください</string>
<string-array name="kinds">
    <item >項目1</item>
    <item >項目2</item>
    <item >項目3</item>
</string-array>



次にres/layout/activity_main.xmlにSpinnerを登録します。


<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/kinds"    ← string-arrayのname
    android:prompt="@string/prompt" /> ← stringのname



■■■■表示項目をプログラムで動的に作成し、項目が選択された時Toast表示■■■■

リソースのレイアウト(res/layout/activity_main.xml)ではentriesとpromptはなしでSpinnerを登録します。


<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />


ActivityのonCreateでは、
  • ArrayAdapterを使って選択項目を登録し、
  • プロンプトを登録し、
  • 項目が選択されたらそれを表示します


protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 strs = getResources().getStringArray(R.array.kinds);

 //--------------------------スピナー取り出し
 spinner = (Spinner)findViewById(R.id.spinner1);

 //--------------------------スピナー用アダプタ
 ArrayAdapter adapter = new ArrayAdapter
   (this,android.R.layout.simple_spinner_item, strs);
 spinner.setAdapter(adapter);


 //-------------------------- Spinnerのレイアウトとプロンプト
 adapter.setDropDownViewResource
          (android.R.layout.simple_spinner_dropdown_item);
 spinner.setPromptId(R.string.prompt);

 //-------------------------- Spinnerが選択された時の処理
 spinner.setOnItemSelectedListener(new OnItemSelectedListener(){
  public void onItemSelected(AdapterView parent, 
                View view, int position, long id) {
   String item = (String) spinner.getSelectedItem();
   Toast.makeText(MainActivity.this, 
                                      item, Toast.LENGTH_LONG).show();
  }
  public void onNothingSelected(AdapterView parent) {
  }
 });
}



にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

2014年5月27日火曜日

Androidエミュレータで日本語入力する方法

目次へ



エミュレータを使いEditTextに何か入力しようとするとデフォルトでは日本語が入力できません。
日本語が使えるようにするには次のような設定が必要です。


■■■■エミュレータで日本語を使うための設定■■■■

エミュレータのMENUボタン(下の画像の〇の部分)をクリックするとメニューが表示されるので、その中のSystem settingsをクリックする。


次に表示されたリストの中からLanguage&inputをクリック


次のリストからDefaultをクリックし、表示されたメニューからJapaneseIMEを選択する。


この後、EditTextに文字を入力しようとすると下のように日本語が入力できるようになる。





にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

2013年10月17日木曜日

Androidで画像を扱う

目次へ



  • リソースIDからImageViewにイメージを表示する
  • リソースIDで指定した画像をBitmapオブジェクトに変換する
  • Bitmapオブジェクトをbyte配列に変換する
  • byte配列をBitmapオブジェクトに変換する
  • BitmapオブジェクトをImageViewに表示する
  • ImageViewの画像を消す


■リソースIDからImageViewにイメージを表示する

layoutのxmlで指定するなら、次のようにします。
@drawable/ic_launcherはres-drawableの中にic_launcher.pngなどがあったら、その拡張子を除いたものです。
<ImageView
   android:id="@+id/gazou"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:src="@drawable/ic_launcher" />


プログラムの中でリソースに登録された画像をセットするなら次のようになります。
 ImageView v = (ImageView)findViewById(R.id.gazou);
 v.setImageResource(R.drawable.ic_launcher);



■リソースIDで指定した画像をBitmapオブジェクトに変換する

 Resources r = getResources();
 Bitmap bmp = BitmapFactory.decodeResource(r, R.drawable.ic_launcher);



■Bitmapオブジェクトをbyte配列に変換する

SqLiteに保存するときなどbyte配列に変換する必要があります。
上で作成したBitmapオブジェクトをbyte配列に変換するのが下のプログラムです。
compressメソッドの第2引数はcompressorへのヒント用に0-100の値を入れ、0は画像サイズが小さいことを示し、100は大きいことを示します。
ただ、pngなどの形式ではこの値は無視されると書いてありますので、まあ、適当な値を入れておけばよいのでしょう。
また、第1引数は、画像の形式がPNGであることを示します。JPEGなら、CompressFormat.JPEGとなります。
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 bmp.compress(CompressFormat.PNG, 100, baos);
 byte[] bytes = baos.toByteArray();



■byte配列をBitmapオブジェクトに変換する

今度は逆にbyte配列をBitmapオブジェクトに変換します。
SqLiteに保存されていた画像を表示する時などに必要です。
decodeByteArrayの第2引数はオフセット(bytes配列のどこからか)を示します。
第3引数はオフセットから数えて何バイトを変換するかを示します。
 Bitmap bmp = null;
 byte[] bytes = xxx; //ここに画像データが入っているものとする
 if (bytes != null) {
   bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
 }



■BitmapオブジェクトをImageViewに表示する

上で作成したBitmapオブジェクトをImageViewに表示するには次のようにします。
 ImageView v = (ImageView)findViewById(R.id.gazou);
 v.setImageBitmap(bmp);



■ImageViewの画像を消す

これでよいのかどうかわかりませんが、これを実行するとエラーにもならず、画像は消えます
 ImageView v = (ImageView)findViewById(R.id.gazou);
 v.setImageBitmap(null);



にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

2013年10月3日木曜日

GAEでセッションを使う

目次へ



GAEでsessionを使うにはappengine-web.xmlで設定が必要です


■■■■appengine-web.xmlの設定■■■■

WEB-INFの中のappengine-web.xmlファイルに、sessions-enabledのタグを追加します。

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application></application>
<version>1</version>
<sessions-enabled>true</sessions-enabled>  ←これを追加
     :
     :



■■■■セッションにデータを入れるサーブレット■■■■

たとえば、下のプログラムをサーブレットに書くと次のことを実行します。
セッションスコープにsessesという名前で、"session-abc"という文字列を入れます。
チェックのためにリクエストスコープにはreqreqという名前で、"request-ABC"を入れます
その後 abc.jsp にfowardします。

 HttpSession session = req.getSession();
 session.setAttribute("sesses", "session-abc");
 req.setAttribute("reqreq", "request-ABC");
 req.getRequestDispatcher("abc.jsp").forward(req, resp);



■■■■セッションのデータを使うJSP■■■■

forward先のabc.jspでは、次のようにしてセッションスコープの sesses とリクエストスコープの reqreq を表示します。
fowardした場合には、sessesの"session-abc"という文字列も、reqreqの"request-ABC"という文字列も両方表示されます。
しかし、その後、ブラウザを閉じずに(セッションを保持したまま)、abc.jspを直接リクエストすると、リクエストスコープのデータはなくなっているため、 "session-abc"だけが表示されます。

これでGAE上でセッションが使えたことがわかります。

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>abc.jsp</title>
</head>
<body>
  ${sesses}<br/>
  ${reqreq}
</body>
</html>



にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

2013年9月28日土曜日

Google App Engine(GAE)とは

目次へ



Google App Engine(以下GAEと書きます)とは、なんなのかを書きます。


■■■■GAEとは■■■■

GAEはGoogleのインフラ上で自作のWebアプリケーションを実行するためのしくみです。
そのために、GAEは次の3つの仕組みを提供しています。
・アプリケーション環境
-Webアプリケーションを実行するための環境
・App Engine SDK
-Webアプリケーションを開発するための開発キット
・管理コンソール
-Webアプリケーションを管理するための機能



■■■■アプリケーション環境■■■■

Webアプリケーションを公開するにはサーバが必要です。
一般的には、レンタルサーバを提供する会社と契約して、サーバを用意します。

このサーバに相当するものとして、GAEでは、アプリケーション環境と呼ばれるWebアプリケーションの実行環境を提供しています。
ここにWebアプリケーションをアップロードすることで、インターネット上に後悔することができます。
次のようなイメージです。


インターネット
   ↓
アプリケーション環境(以下がアプリケーション環境です)
  Webアプリケーション(Java/Python)
  ランタイム環境(Java/Python)
  データストア・サービス・標準インターフェース※


データストア DB
サービス メールサービスなどのサービス。下記参照
標準インターフェース サービス、Java,PythonからDBなどを操作できるAPI



■■■■App Engine SDK■■■■

GAE用のWebアプリケーションを開発するためには、
Google App Engine SDK(Java/Python用)
が必要です。

SDKには、主に次の3つの機能があります。
・アプリケーションの作成・ビルド
・開発用サーバでの動作確認
・アプリケーション環境へのアップロード



■■■■管理コンソール■■■■

管理コンソールを使って、GAE上に公開したWebアプリケーションの管理が行えます。
管理コンソールでは、ログ、データストアの統計情報、その他のリソースの使用料などが確認できます。



■■■■GAEが提供するサービス■■■■

サーブレット&JSP リクエストを受け付けて、画面を返す機能
データストア GAEが準備するデータベースへの読み書き機能
ブロブストア 画像など大きなデータの読み書き機能
チャネル クライアント・サーバ間でのリアルタイム通信を実現する機能
画像処理 画像処理を行う機能(Imagesライブラリ)
メール メールの送受信を行う機能
メモリキャッシュ 頻繁に使われるデータをキャッシュする機能
マルチテナント 1つのアプリケーション上で複数の環境を使用する機能
OAuth認証 OAuth認証を使うための機能
タスクキュー 時間のかかる処理をバックグラウンドで行うための機能
スケジュールタスク 決まった時間や間隔でサーブレットを起動する機能
URLフェッチ GAEから外部のWebサービスを呼び出す機能
ユーザアカウント Googleアカウントまたは、OpenIDを使ったユーザ管理を行うための機能
XMPP インスタンスメッセージを送受信するXMPPを利用するための機能



今回の内容は下の本で調べました。

作ればわかる!Google App Engine for Javaプログラミング

新品価格
¥3,150から
(2013/9/28 17:02時点)




にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

2013年9月17日火曜日

AndroidでRadioButtonを使う

目次へ



RadioButtonを使うには、RadioGroupの中にRadioButtonを作成し、 必要な時にどのボタンにチェックがついているかを見ます。


■■■■layoutのリソースを作成■■■■

RadioGroupの中にRadioButtonを入れます。
RadioGroupのorientationを指定するとRadioButtonがその方向に並びます。

    <RadioGroup
        android:id="@+id/radiogroup"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="@string/level1" />

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/level2" />

    </RadioGroup>



■■■■プログラムでチェックがどれについているか確認■■■■

isCheckedメソッドでチェックが入っているか確認します。

RadioButton r1 = (RadioButton)findViewById(R.id.radio1);
RadioButton r2 = (RadioButton)findViewById(R.id.radio2);

if(r1.isChecked()) {
 radio1がチェックされている時の処理
} else if(r2.isChecked()) {
 radio2がチェックされている時の処理
}




にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

2013年8月28日水曜日

公開中のAndroidアプリをバージョンアップする

目次へ



公開しているAndroidアプリをバージョンアップしたいときには、
  • プログラムを変更し、AndroidManifest.xmlでバージョンを指定
  • 新しい署名入りAPKを作成しアップロード
あとは、自動で知らせがいくのでユーザが自分でアップロードすることになります。


■■■■バージョンを指定する■■■■

AndroidManifest.xmlでバージョンを指定します。
android:versionCode で指定するのは以前のバージョンより大きい整数です。
android:versionNameに指定するのがインストールする時などに表示されるバージョンになります。

     :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xx.xx"
    android:versionCode="2"
    android:versionName="1.1" ?>
     :

■■■■APKファイルを作成しアップロード■■■■

この後このページの「署名入りAPKファイルを作成」の方法で新しいAPKファイルを作成します。

その後、同じページの「APKファイルをアップロード」の方法で今作成したAPKファイルをアップロードします。

これだけでインストールしているユーザには新しいバージョンがあるとのしらせがあるため、必要な人はバージョンアップしてくれるはずです。


にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村