ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2014年6月5日木曜日

AndroidのEditTextを使う

目次へ



Androidで文字を入力してもらうには、EditTextを使います。
  • EditTextのプロパティ(hint、inputType)
  • 入力された文字列の取り出し


■■■■いろいろなプロパティ■■■■

EditTextでは、入力文字列をチェックして、たとえば、数字しか入力できないようなEditTextを作ることができます。
そんな時に使うのがinputTypeというものです。

また、EditTextに何も入力されていない時に、表示しておく文字列をヒントといいます。
ヒントとして使う文字列はres/values/strings.xmlに登録しておきます。



文字列をリソースとして登録
<string name="prompt">ここに〇〇を入力</string>


リソースのレイアウトres/layout/activity_main.xmlでinputType、hintを設定する。
<EditText
     android:id="@+id/edit1"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:inputType="textMultiLine"
     android:hint="@string/prompt"  />


android:inputTypeについて

android:inputTypeを指定するとたとえば、数字しか入力できないなどを指定することができます。
リソースで登録しておく場合とプログラムで指定する場合があると思いますが、 プログラムで指定するには、setInputTypeメソッドを使います。
EditText edit = (EditText)findViewById(R.id.edit1);
edit.setInputType
    (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL);


よく使いそうな、入力チェックについて、リソースで指定する場合の値とプログラムで指定する場合の引数を次にまとめてみました。
入力値 android:inputTypeで指定するもの EditText#setInputTypeメソッドの引数
改行なしテキスト text InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL
改行含むテキスト textMultiLine InputType. TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE
パスワード入力 textPassword InputType. TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD
符号なし整数 number InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL
符号付き整数 numberSigned InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED
小数点含めた数字 numberDecimal InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL


android:hintについて

android:hintでの指定をプログラムで行うにはsetHintメソッドを使います。
EditText edit = (EditText)findViewById(R.id.edit1);
edit.setHint(R.string.prompt);



■■■■入力された値を取り出す■■■■

プログラムで入力されたテキストを取得するには、次のように、getText().toString()で取得します。

EditText edit = (EditText)findViewById(R.id.edit1);
String str = edit.getText().toString();



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

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年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技術メモへ
にほんブログ村

2013年8月23日金曜日

AndroidアプリにAdMobを使ってバナーを表示する

目次へ



Google AdMob Ads SDKを使ってAndroidアプリにバナーを表示するには次のことが必要です
また、これについては Google AdMob Ads Android(初級)のページを参照してください

  • Google Mobile Ads SDKをダウンロードし、Eclipse に組み込む
  • AdMobと契約
  • AdMobにアプリを登録
  • アプリにAdView(バナーを表示するためのビュー)を表示
    1. AndroidManifest.xmlでINTERNETとACCESS_NETWORK_STATE権限を設定
    2. AndroidManifest.xmlでAdMob SDKを使うためにactivityの宣言
    3. 方法①layoutのxmlファイルでAdViewを表示する
    4. 方法②プログラムでAdViewを表示する


■■■■Google Mobile Ads SDKをダウンロードし、Eclipse に組み込む■■■■

  • https://developers.google.com/mobile-ads-sdk/download?hl=jaのページで GoogleAdMobAdsSdkAndroid.zipをダウンロードし展開
  • Eclipseを開き、その中のjarファイルをアプリのプロジェクトのlibsフォルダにコピー
  • 今コピーしたjarファイルをビルドパスに追加
    Eclipseのパッケージエックスプローラでプロジェクトをクリックした後、メニューの[プロジェクト]-[プロパティ]-[左のメニューからjavaのビルドパス]をクリック
    [ライブラリタブ]をクリックし[外部jar追加ボタン]を押し、jarファイルを追加
これで、com.google.ads.AdView(これがバナーを表示するためのビュー)が使えるようになります

■■■■AdMobと契約■■■■

AdMobへの申し込みページで申し込みを行います。 支払いを受け取るために、銀行口座などが必要です

■■■■AdMobにアプリを登録■■■■

AdMobのページでログインします。
サイト/アプリケーションの追加ボタンを押し、アプリを登録します。


■■■■AndroidManifest.xmlの設定■■■■

AndroidManifest.xmlで
  • com.google.ads.AdActivityの宣言
  • 権限
が必要です
次の例はGoogle AdMob Ads Android(初級) に記載されていたxmlの例です
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.company"
          android:versionCode="1" android:versionName="1.0">
  <application android:icon="@drawable/icon" android:label="@string/app_name"
               android:debuggable="true">
    <activity android:label="@string/app_name" android:name="BannerExample">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>
    <activity android:name="com.google.ads.AdActivity"
          android:configChanges=
          "keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
  </application>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
2つ目のactivityとuses-permissionが必要です

■■■■layoutのxmlファイルでAdViewを表示■■■■

Adviewをlayoutのxmlファイルに書くか、プログラムの中でAdViewを作成すればそこに、バナーが表示されます。
まず、layoutのxmlファイルで設定する方法

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"  これがads:を使うために必要
 以下省略>    




    <com.google.ads.AdView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"  1番下に表示したいなら
        ads:adSize="BANNER"
        ads:adUnitId="パブリッシャID"         パブリッシャIDを知る方法は下で
        ads:loadAdOnCreate="true"
        ads:testDevices="TEST_EMULATOR, TEST_DEVICE_ID" />



バナーを入れたい場所にcom.google.ads.AdViewを作成します。
ここで使っているads:は1番最初のタグで設定しておきます。

パブリッシュIDを知る方法
AdMobのページにログインします。
下の方に登録されているアプリの名前が出ています。
その名前にマウスのポインタを乗せるとレポートボタンと設定を管理ボタンが表示されますので、設定を管理ボタンを押します。
すると、次のページでアプリの名前の下にサイトURLとパブリッシャーIDが表示されています。
それをマニフェストファイルの ads:adUnitIdに設定します

■■■■プログラムでAdViewを表示■■■■

次はプログラムでAdViewを作成する方法です。

private AdView adView;
protected void onCreate(Bundle savedInstanceState) {
    
            省略
    adView = new AdView(this, AdSize.BANNER, "パブリッシャーID");
    RelativeLayout layout = (RelativeLayout)findViewById(R.id.xx);
    layout.addView(adView);
}
@Override
public void onDestroy() {
    adView.destroy();
    super.onDestroy();
}






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

2013年8月22日木曜日

Androidアプリを公開する

目次へ



Androidアプリを公開するまでの流れ
  1. Googleアカウントを作成する
  2. デベロッパーアカウントを作成する(登録料 $25)
  3. アプリを作成し、公開用にデジタル署名したAPKファイルを作成する
  4. APKファイル作成時のMissingTranslationエラー解決方法 追加
  5. 公開用にアプリのキャプチャー画像、アイコン、説明文を作成する
  6. APKファイルをアップロードする


■■■■Googleアカウントを作成■■■■

Googleアカウントを作成のページでアカウントを作成します。
すでにアカウントを持っている場合は必要ありません。

■■■■デベロッパーアカウントを作成■■■■

  • https://play.google.com/apps/publish/signup/のページでGoogleアカウントを使ってログインします
  • デベロッパー契約に同意します
  • 支払いに進むボタンをクリックします
  • 氏名、クレジットカード番号、デベロッパー名、メールアドレス、電話番号などを入力し、クレジットカードから$25支払います
    電話番号は03-1111-1111なら、+81-3-1111-1111などと入力します。+81が日本。市外局番の先頭の0は省略


■■■■署名入りAPKファイルを作成(Eclipseで作成)■■■■

ここでは証明書の設定をしています。証明書は、公開鍵が本人のものであることを証明します。 一般的には認証局によって発行されますが、Androidアプリで使用する証明書は自分で作成した(自己認証局)証明書を使います。

  • Eclipseでプロジェクトを右クリックし[Androidツール]-[署名アプリケーションパッケージのエクスポート]
  • 最初のページでプロジェクト名を確認
  • Keystore selectionのページで create new keystoreにチェックを入れ
    ロケーション 自分で決めたフォルダ\wings.keystore
    パスワード  自分で決める

    いったんキーを作成してしまえば、次からバージョンアップなどの時には、use existing keystoreにチェックを入れ、ロケーション、パスワードは今決めたものを指定します
  • KeyCreationのページで
    エイリアス  任意のキーの別名
    パスワード  さっきのパスワードと違ってもいいようですが、とりあえず同じにしました
    確認     パスワードをもう1回
    Validity   鍵の有効期限として 25を入力 25以上が推奨されている
    First and Last Name  任意の作者名
    その下すべて省略
    First and Last NameからCountry Codeまでは省略可能ですが、少なくともどれか一つの項目を入力する必要があります
  • Destination and key/certificate checksページで
    Destination APK file  任意のフォルダ\xxx.apk


■■■■APKファイル作成時MissingTranslationエラー解決方法 ■■■■

2014年6月30日追記

久しぶりにAPKファイルを作成しようとしたところ、string.xmlファイルでエラーが起き、APKファイルが作成できなくなってしまいました。
APKを作成しようとする前までは、全く文句を言われなかったのに、署名アプリケーションパッケージのエクスポートをクリックすると、string.xmlにエラーが表示されてしまいます。

MissingTranslationというLintエラーのようです。
これは、よくわからないのですが、いろいろな言語に対応するstring.xmlが必要だけどないよ というエラーのようです。
その対策は、MissingTranslationをエラーとしなければよいとのことで次の方法で、MissingTranslationをワーニングエラーとすることで解決しました。

ECLIPSEのメニューから[ウィンドウ]-[設定]-[Android]-[Lintエラー検査]-[Idの中のMissingTranslationをクリック]-[Severityと書いてあるコンボボックスからWarningを選択]

これで、APKファイルを作成できました。

これについてはここで教えていただきました


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

https://play.google.com/apps/publishのページでまだログインしてなければGoogleアカウントでログインします
タイトルなど必要な情報を入力し、アップロードします

もし、パッケージ名をcom.example.xxの名前にしていると、APKファイルをアップロードできません。
その時はパッケージ名を変更して、APKファイルを作成しなおしてから、もう1度アップロードをしてください。
パッケージ名を変更する方法はこちら(Androidアプリのパッケージ名を変更する)です。


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

2013年8月19日月曜日

AndroidManifest.xml で meta-data を使う

目次へ



AndroidManifest.xmlの中にデータに名前をつけて登録しておくと、そのデータを登録した名前で使うことができます。


■■■■AndroidManifest.xmlに登録■■■■

<br/>
たとえば、AndroidManifest.xmlでnamaeという名前でdataというデータを登録しておきます( ① )。

<pre>
    <application ...>
        <activity...>
            :
        </activity>
        <meta-data android:name="namae"  android:value="data" >         ①
    </application>
</pre>

<br/><br/>

■■■■プログラムで取り出す■■■■

<br/>
プログラムの中で使うには
・ApplicationInfoのインスタンスを取り出し、<br/>
・metaData.getStringメソッドに名前を渡し、データをとりだします<br/><br/>


<pr>
ApplicationInfo  info = null;
try {
    info = getPackageManager().getApplicationInfo(
                                          getPackageName(), PackageManager.GET_META_DATA);
}   catch (NameNotFoundException e) {
}
String s = info.metaData.getString("namae")       //sの内容は"data"
</pre>





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

Android LinearLayout weight

目次へ



LinearLayoutのweightを使うと全体の大きさに合わせて重みづけを指定することができます


■■■■layoutのxmlでweightを指定する■■■■


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout                                   ①
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/back" />

        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" >             ②
            <requestFocus />
        </EditText>

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="★" />
        
    </LinearLayout>

    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>



①で、orientationを指定していないのでこのLinearLayoutはhorizontalが指定されていることになり、ボタンとエディットテキストとボタンの3つのViewが横に並びます。
weightを指定しているのはエディットテキストだけなので( ② )、ボタンを2つ作った残りのサイズはすべてエディットテキストとなります。

もし、3つともweightを1,1,1と指定すれば、同じ大きさになり、
また、weightを1,2,1と指定すれば、2と指定されたものだけが2倍の大きさになります。




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