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


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

エミュレータでアプリが起動しない。

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

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

ググった結果、エミュレータ上で開発者モードにすることで先に進めました。

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

mrginが効かない。

1日目にRelativeLayoutにすることで、layout_centerInParentlayout_widthを表示出来ることを知った。
しかし、今日2つ目のTextViewを配置したところ、marginを設定してもエミュレータでボタンと一緒に上に張り付いてしまう。

そこで、RelativeLayoutとは何か、何なのか。
また、ConstraintLayoutと何が違うのかググってみたら、こっちの方が便利な気がしてきた。
ググった結果、アプリケーションのレイアウトが一番わかりやすいと感じた。

詳しいことは、上記サイトにお任せして、とりあえずConstraintLayoutの方が、直感的にlayoutの設定がしやすいと感じた。

起動時のエラー

ボタンとテキストビュー2つを配置した辺りから、エミュレータ起動時にemulater-5554とエラーを吐くようになってきた。

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

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

debug log

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

Log.d("CurerentDateTime", new Date().toString());

一旦パス。

autoLink

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

<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 または [email protected] からお願いします。"
    app:layout_constraintTop_toBottomOf="@+id/btnCurrent"
    tools:layout_editor_absoluteX="0dp" />

画面保持

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

// 画面が破棄される前に状態を保存
@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"));
}

トースト

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

//buttonをクリックしたら、DateTimeをトーストで表示する
public void btnCurrent_onClick(View view){
  Toast tost = Toast.makeText(
     this, new Date().toString(), Toast.LENGTH_LONG);
  tost.show();
}