Androidプログラミングに挑戦2!(11)単位変換アプリを作る(その2)

0
    JUGEMテーマ:プログラミング

    続きです。
    最初に、これまでの操作でどんなコードが生成されているか、確認しておきましょう。

    まずは、画面レイアウトを定義している、layout/activity_unit_converter1.xml
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.tetsuya.unitconverter1.UnitConverter1">
    
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:id="@+id/linearLayout">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="@string/input"
                android:id="@+id/textView" />
    
            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"
                android:ems="10"
                android:id="@+id/editText"
                android:layout_weight="1" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="@string/lbs"
                android:id="@+id/textView2" />
        </LinearLayout>
    
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/linearLayout"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:weightSum="1"
            android:id="@+id/linearLayout2">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="@string/output"
                android:id="@+id/textView3" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="@string/initialValue"
                android:id="@+id/textView4"
                android:layout_weight="0.99" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="@string/kg"
                android:id="@+id/textView5" />
        </LinearLayout>
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/convert"
            android:id="@+id/button"
            android:layout_below="@+id/linearLayout2"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>
    
    

    LinearLayoutに囲まれた入力行と出力行、そして変換ボタンが定義されています。
    続いて文字を定義しているvalues/strings.xml
    <resources>
        <string name="app_name">UnitConverter1</string>
        <string name="input">入力:</string>
        <string name="lbs">lbs</string>
        <string name="output">出力:</string>
        <string name="initialValue">0</string>
        <string name="kg">kg</string>
        <string name="convert">変換</string>
    </resources>
    
    

    画面表示に使われている文字が全て定義されているのが判ると思います。

    それでは、次はjavaのプログラムを入力していきましょう。
    UnitConverter1.javaです。
    package com.example.tetsuya.unitconverter1;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    // 中で使用するEditText, TextView, Viewをimport
    import android.widget.EditText;
    import android.widget.TextView;
    import android.view.View;
    
    public class UnitConverter1 extends AppCompatActivity {
    // 使用する変数等を定義
        EditText editText;
        TextView textView4;
        double conversionRatio=0.45359243; // lbs→kgの変換係数
        double inputValue;
        double outputValue;
        String input;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_unit_converter1);
    
            // 入力エリアと出力表示エリアのインスタンスを取得
            editText  = (EditText) findViewById(R.id.editText);
            textView4 = (TextView) findViewById(R.id.textView4);
    
            // 変換ボタンのオンクリックリスナーを設定
            findViewById(R.id.button).setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){ // ボタンクリック時の処理を定義
                    // 入力欄に記入されたテキストを取得
                    input = editText.getText().toString();
                    // 取得したテキストを数値に変換
                    inputValue = Double.parseDouble(input);
                    // lbs→kgに変換
                    outputValue = inputValue*conversionRatio;
                    // 変換した数値を文字列として出力エリアにセット
                    textView4.setText(String.valueOf(outputValue));
                }
            });
        }
    }
    

    書き加えた部分を解説してゆきます。
    まず6〜8行目、中で使用するwidgetとviewを読み込んでいます。
    12〜17行目、今度は使用する変数と定数を定義しています。
    25〜26行目、入力を受け取ったり出力を書き込んだりと、色々な操作を行う対象のeditTextとtextViewのインスタンスを取得しています。こうすることで、これらの対象をメソッドで操作できるようになります。
    一番難しいのが、29行目。ここではボタンにオンクリックリスナーインタフェースを実装しています。オンクリックリスナーとはクリックされるかどうか聞き耳を立てる機能で、クリックされると「onClick」メソッドが実行されます。
    30〜40行目がそのonClickメソッドの内容です。具体的には、
    33行目:入力欄に書き込まれた文字を文字列として取得する
    35行目:取得して文字列を数値に変換
    37行目:数値に変換した入力値に変換係数を掛けて単位を換算する
    39行目:換算した数値を文字列として出力欄に書き出す。
    となります。

    それでは、これでビルドして、実際にエミュレータ上で動かしてみましょう。
    Android Studioの上のメニューにある三角マーク(実行)か、緑のムシマーク(デバッグ)をクリックします。
    エミュレータを指定してやると、エミュレータが起動され、コンパイルされたアプリがエミュレータ上で動き始めます。
    最初の画面表示はこんな感じです。

    uc028.png

    思わずテンキーで数字を入力しようとしたら、冷たく無反応を食らいました・・・
    スマホなんですからタップですよね。タップ代わりに入力欄をクリックすると、下にテンキーが表示されました。

    uc029.png

    このテンキーをクリックすることで、数字を入力してゆきます。

    uc030.png

    そして最後に「変換」をクリックすると、見事!変換結果が出力欄に表示されました。

    uc031.png


    以上で、Hello World!に次ぐ簡単アプリ第2段、単位変換アプリが無事完成しました。

    次回は、この単位変換アプリを少しずついじって、機能を向上させていきたいと思います。


    コメント
    コメントする








       

    calendar

    S M T W T F S
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
    << January 2019 >>

    アクセスカウンタ

    合計:
    今日:
    昨日:

    selected entries

    categories

    archives

    recent comment

    • ホームページをリニューアルするの巻(19)−Googleウェブサイト翻訳ツールを組み込む
      てちくん
    • ホームページをリニューアルするの巻(19)−Googleウェブサイト翻訳ツールを組み込む
      てちくん
    • ホームページをリニューアルするの巻(19)−Googleウェブサイト翻訳ツールを組み込む
      小田きく江
    • ロリポブログでGoogleにサイトマップを登録する際の注意事項
      てちくん
    • ロリポブログでGoogleにサイトマップを登録する際の注意事項
      suraugi
    • いそべぇのペーパークラフトを作る(初級編)(12)
      てちくん
    • いそべぇのペーパークラフトを作る(初級編)(12)
      だべえ
    • noomでマイナス12kgのダイエットに成功!
      Yoko

    recommend

    recommend

    recommend

    ドール デザートメーカー ヨナナス901
    ドール デザートメーカー ヨナナス901 (JUGEMレビュー »)

    結構高いんです、でも欲しいんです!

    links

    profile

    書いた記事数:173
    最近の更新日:2017/01/30

    search this site.

    others

    mobile

    qrcode

    powered

    無料ブログ作成サービス JUGEM

    Google Adsense

    楽天ブックス

    楽天