アンドロイドアプリを作る。（2、3日目）

いきなり2日目から書き忘れるというズボラさ。
2、3日目の分をまとめて記載。

##エミュレータでアプリが起動しない。
２日目、項目を進めていたら、コンパイルエラーが解決できなくなった。
そのため、再度プロジェクトを作り直したのだが、**エミュレータを起動してもアプリが起動しない。**

よく見ると、下の方で`waiting for target device to come online`と出てずっと考えている。

ググった結果、[エミュレータ上で開発者モードにする](https://qiita.com/amama-nagigi/items/3fb59c6209d0259fab03#%E3%82%A8%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF%E7%AB%AF%E6%9C%AB%E3%81%AEusb%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%82%92on%E3%81%AB%E3%81%99%E3%82%8B)ことで先に進めました。
![スクリーンショット 2018-03-29 23.17.31.png](https://qiita-image-store.s3.amazonaws.com/0/185846/93dacaa5-8670-8641-e0b2-23073d80f816.png)

1度目は、こんなの設定しなくても動いていたが何故だろうか。。。

##mrginが効かない。
１日目に`RelativeLayout`にすることで、`layout_centerInParent`と`layout_width`を表示出来ることを知った。
しかし、今日２つ目の`TextView`を配置したところ、marginを設定してもエミュレータでボタンと一緒に上に張り付いてしまう。

そこで、`RelativeLayout`とは何か、何なのか。
また、`ConstraintLayout`と何が違うのかググってみたら、こっちの方が便利な気がしてきた。
ググった結果、[アプリケーションのレイアウト](https://qiita.com/Yuki_Yamada/items/eb4a25cedca2ff8078fd)が一番わかりやすいと感じた。

詳しいことは、上記サイトにお任せして、とりあえず`ConstraintLayout`の方が、直感的にlayoutの設定がしやすいと感じた。
![スクリーンショット 2018-03-29 23.07.59.png](https://qiita-image-store.s3.amazonaws.com/0/185846/d16c9688-38d0-6368-aaee-9a37fb15f67d.png)


##起動時のエラー
ボタンとテキストビュー2つを配置した辺りから、エミュレータ起動時に**emulater-5554**とエラーを吐くようになってきた。
![スクリーンショット 2018-03-29 14.52.33.png](https://qiita-image-store.s3.amazonaws.com/0/185846/3c44aa60-ca8b-ca94-392a-081bb8ace9b4.png)

ググってみると、PCがタスクオーバーしていると該当のエラーを吐くらしい。
パッと調べた感じだといずれも2010年くらいの記事ばかり。。。
http://androidhacker.blog94.fc2.com/blog-entry-29.html
https://blog.goo.ne.jp/kin2mix/e/f1bc45af8de3aef1b17d4b66aeb94ec4

今時アプリ開発でショボいPC使う人は居ないのかな。


##debug log
以下のように記載すればDebugに表示される。
はずだが、なぜか表示されない。。。

```java
Log.d("CurerentDateTime", new Date().toString());
```
一旦パス。

##autoLink
`android:autoLink="all"`というのを入れれば、Text内のURLや電話番号、メアドにリンクがつく。

```java
<TextView
    android:id="@+id/txt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="all"
    android:text="サポートサイト、 http://www.support.to/ です。お問い合わせは 0120-4567-7890 または web@wings.to からお願いします。"
    app:layout_constraintTop_toBottomOf="@+id/btnCurrent"
    tools:layout_editor_absoluteX="0dp" />
```
![スクリーンショット 2018-03-29 23.07.59.png](https://qiita-image-store.s3.amazonaws.com/0/185846/d16c9688-38d0-6368-aaee-9a37fb15f67d.png)

##画面保持
Andoroidでは、スマホが縦向きから横向きになる際はアプリを開き直しているそうだ。そのため、切り替え前の情報を保持していないと毎回起動時に戻ってしまう。

```java
// 画面が破棄される前に状態を保存
@Override
protected void onSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);
    TextView txtResult = (TextView)findViewById(R.id.txtResult);
    outState.putString("txtResult", txtResult.getText().toString());
}

// 画面が復元される際に取り出し
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    TextView txtResult = (TextView)findViewById(R.id.txtResult);    
    txtResult.setText(savedInstanceState.getString("txtResult"));
}
```

##トースト
美味しそうな名前。
これは、画面に一定時間表示されて消える機能。「ログイン成功」とかなんかそういう一時的に表示できれば良いものに使う様子。

```java
//buttonをクリックしたら、DateTimeをトーストで表示する
public void btnCurrent_onClick(View view){
  Toast tost = Toast.makeText(
     this, new Date().toString(), Toast.LENGTH_LONG);
  tost.show();
}
```
![Tost.gif](https://qiita-image-store.s3.amazonaws.com/0/185846/c2274e11-1aad-5049-4326-2a241658c245.gif)