Android開発の基礎について

#はじめに
こんにちは。某学校でプログラミング等の勉強中のサーバーサイドのプログラマーのワタタクです。:relaxed:
今回もAndroid開発していきましょう。
今回はリクエストがございましたので、リクエストにお答えしましてAndroid開発の基礎について分かりやすく書いていこうかと思います。
#対象者
- Javaがなんとなく書ける人。
- Androidの開発をしてみたい、いきたい人。
- Android開発においては初心者。

#今回書かないこと
- AndroidStudioのインストールのことについて。

#作っていくもの
名前を入力してボタンを押すと下の表示エリアに入力されたものと「〜さん、素敵」という文字列が表示される。

#画面
xmlファイルにて画面を作っていきます

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/tv_name" />

    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"/>

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

    <TextView
        android:id="@+id/tvOutput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="25dp"
        android:text=""
        android:textSize="25dp"/>

</LinearLayout>
```
##解説
###タグ
- LinearLayout :　パーツを縦一列もしくは横一列に並べる場合に使用するレイアウト。
- TextView : 表示エリアを作る
- EditText :　入力エリアを作る
- Button :　ボタンを作る

###属性
####共通属性
```
①android:layout_width="〜〜〜"
②android:layout_height="〜〜〜"
```
①幅の属性
②高さの属性

＜〜〜〜に入る値＞

- match_parent : 画面いっぱいまで広げる。
- wrap_content : 適度なサイズで表示してくれます。
 
####LinearLayoutの属性
```
android:orientation="〜〜〜"
```

＜〜〜〜に入る値＞

- vertical　: 縦に並べる
- horizontal : 横に並べる

####LinearLayout以外で使っている属性
```
android:text="value値"
＊通常「string.xml」で出力する内容を指定し、そこから読み込んでくるイメージ
```
```xml:例
android:text="@string/bt_click"
```

```
android:id="@+id/アクティビティで部品を取得為のID（名前）"
→R値：resフォルダ内のファイルやそのファイルの「@ + id/」の値などは管理対象なのでそのファイルや値を識別するint型の整数。
自動生成される。
```

```xml:例
android:id="@+id/tvOutput"
```

####EditTextで使っている属性

```
android:inputType="〜〜〜"
```

〜〜〜 : inputTypeの種類

**＜inputTypeの種類＞**
none	入力不可。
text	普通のテキスト。
textCapCharacters	すべて大文字で入力する場合。
textCapWords	単語の先頭を大文字で入力する場合。
textCapSentences	文章の先頭を大文字で入力する場合。
textAutoCorrect	文字の入力を自動で修正する場合。
textAutoComplete	文字の補完入力する場合。
textMultiLine	文字を複数行入力する場合。
textImeMultiLine	通常の文字入力時は複数入力を許可せず、IMEによって複数行入力を設定する場合。
textUri	URLを入力する場合。
textEmailAddress	メールアドレスを入力する場合。
textEmailSubject	メールの件名を入力する場合。
textShortMessage	ショートメッセージを入力する場合。
textLongMessage	ロングメッセージを入力する場合。
textPersonName	人名を入力する場合。
textPostalAddress	住所を入力する場合。
textPassword	パスワードを入力する場合。
textVisiblePassword	パスワードの文字を見せて入力する場合。
textWebEditText	HTMLを入力する場合。
textFilter	他のデータでフィルタされた文字を入力。
textPhonetic	発音記号を入力する場合。
number	数値入力する場合。
numberSigned	符号付きの数値を入力する場合。
numberDecimal	小数入力する場合。
phone	電話番号を入力する場合。
datetime	日付時刻を入力する場合。
date	日付を入力する場合。
time	時刻を入力する場合。


#アクティビティ（処理）
javaで書いていきます。

```java:ButtonClickSampleActivity.java
public class ButtonClickSampleActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_click_sample);

        Button button = findViewById(R.id.btClick);
        ButtonClickListener listener = new ButtonClickListener();
        button.setOnClickListener(listener);
    }

    /**
     * ボタンが押された時の処理が記述されたメンバクラス
     */
    private class ButtonClickListener implements View.OnClickListener {

        @Override
        public void onClick(View view) {
            EditText input = findViewById(R.id.etName);
            String inputStr = input.getText().toString();

            TextView output = findViewById(R.id.tvOutput);
            output.setText(inputStr + "さん、素敵！！" );
        }
    }
}
```

##解説
AppCompatActivityを継承します。
###onCreate()メソッド
*Androidアプリが起動するメソッド。*
→初期表示などに必要なことはこのメソッド内に書く。
しかし、以下の２行は必須

- super.onCreate(savedInstanceState);
- setContentView(画面のxmlファイル);

＊この２行は書いてくれているが一様のため書いておく。


###画面部品取得
**findViewById()**を使い、引数にその部品のR値(部品につけたID)を指定します。


```java
EditText input = findViewById(R.id.etName)
```
###文字列を取得する
**getText().toString()**を使います。

```java
input.getString().toString()
```
###文字列を埋め込む
**setText("埋め込む文字列")**を使います。

```java
TextView output = findViewById(R.id.tvOutput);//部品取得
output.setText(inputStr + "さん、素敵！！" );
```

###イベントリスナー
- イベント：画面に対してユーザが何かの操作をすること。
- イベントハンドラ：イベントに対応して行う処理。
- リスナー：このイベントの検証を行う。

＊Androidではこのリスナーを設定しないとイベント処理が成り立たない。
####リスナー設定の手順
①それぞれのイベントに対応したリスナークラスをメンバクラスとして作成する。
②インターフェースに定義されたメソッドに処理を書く。
③リスナークラスを「new」してリスナーを設定する。
####例）（ボタンのクリックリスナー）

```java
Button button = findViewById(R.id.btClick);
ButtonClickListener listener = new ButtonClickListener();
button.setOnClickListener(listener);

private class ButtonClickListener implements View.OnClickListener {

        @Override
        public void onClick(View view) {
            EditText input = findViewById(R.id.etName);
            String inputStr = input.getText().toString();

            TextView output = findViewById(R.id.tvOutput);
            output.setText(inputStr + "さん、素敵！！" );
        }
}
```

また無名関数を使った書き方もできる(参考書などはこの書き方で書いていることが多い。)
やっていることは同じ。

```java
findViewById(R.id.btClick).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText input = findViewById(R.id.etName);
                String inputStr = input.getText().toString();

                TextView output = findViewById(R.id.tvOutput);
                output.setText(inputStr + "さん、素敵！！" );
            }
});
```





以上。Android開発の基礎でした。
もし何か間違っている等のご指摘があればご連絡ください。
最後まで読んで頂きありがとうございました。