概要
数年前の新卒時代に書いていた下書き記事があったので供養です。
ここしばらくAndroid触っていなかったので、思い出すにはちょうどいいかも。
Androidアプリの開発
Androidアプリ開発の備忘録を書いていく.
環境
Android Studio 3.5(2019 年 8 月)
OS : Windows10
Android アプリ開発の概要
処理をJAVAクラスに,画面構成をXMLに記述する.
JAVAクラスをアクティビティ(Activity),xmlファイルをレイアウトファイルと呼ぶ.
プロジェクトの準備
プロジェクトの構成
プロジェクトを作成して,Run Buildが完了したら,以下のような構成になる.
中身はこんな感じ.赤く丸をつけているところが今回触るところ.
各ファイル構成
manifestsフォルダ
AndroidManifest.xml ファイルが格納されている.
アプリの実行に必要な設定を記載する.
詳しくはアプリ マニフェストの概要を参照.
例えばどんなときに使う?
例)WebViewを使うときに,ネットワークへアクセス許可を出すときとか.
ネットワークに接続する
<uses-permission android:name="android.permission.INTERNET" />
javaフォルダ
処理を行うためのファイルが格納される.
最初はMainActivityが格納されている.
このファイルにボタンクリック時などの処理を書いていく.
resフォルダ
画面構成を記述するためのファイルが格納される.
-
res/layout
- activity_main.xmlは,画面構成のためのxmlファイル.
-
res/values
- strings.xmlは,アプリ画面の文字列を格納しておくファイル.
ここに書いておけば,多言語に対応させたい場合に自動的に言語を切り替えてくれるらしい. - activity_main.xmlに文字列を直書きしているとAndroid studio先生に怒られるので,できる限りこっちに書くようにする.
- strings.xmlは,アプリ画面の文字列を格納しておくファイル.
画面レイアウト作成
res/layout/activity_main.xmlを選択する.
左下に「デザイン」「テキスト」とあり,現在はデザインを選択している状態.
画面レイアウトを確認すると,画面中央に"Hello World"と書かれている.
今はいらないのでdeleteで消しておく.
ボタン追加
画面遷移用のボタンを設置する.
パレットからButtonを画面レイアウトにドラッグすると,ボタンを追加できる.
しかし,コンポーネント・ツリーを見ると,!マークで警告が出ている.
とりあえず動かしてみる
これだけでもアプリは起動できるので,とりあえずどんな感じなのか動かして確認してみる.
ボタンを中央に配置したつもりが,画面左上に配置されている...
制約の警告メッセージを見てみる.
This view is not constrained. It only has designtime positions, so it will jump to (0,0) at runtime unless you add the constraints The layout editor allows you to place widgets anywhere on the canvas, and it records the current position with designtime attributes (such as layout_editor_absoluteX). These attributes are not applied at runtime, so if you push your layout on a device, the widgets may appear in a different location than shown in the editor. To fix this, make sure a widget has both horizontal and vertical constraints by dragging from the edge connections. Issue id: MissingConstraints
Google翻訳
このビューには制約がありません。 設計時の位置しかないため、制約を追加しない限り、実行時に(0,0)にジャンプします 。 これらの属性は実行時に適用されないため、デバイスにレイアウトをプッシュすると、ウィジェットはエディターに表示される場所とは異なる場所に表示される場合があります。 これを修正するには、エッジ接続からドラッグして、ウィジェットに水平および垂直の両方の制約があることを確認します。
制約を追加しないと強制的に(0,0)に飛ばされるみたい.
解像度が違っても同じようにレイアウトを配置するための制約なのだろうか?
公式ドキュメント:ConstraintLayout
結局どうする
Not horizontally constrained.
Not vertically constrained.
「水平方向に制約されていません。垂直方向に制約されていません。」
警告文に従い,水平方向と垂直方向の制約を追加してみる.
@string resource
xmlに直接文字列を書き込んでいるのが問題っぽい.
android:text="Button"
って書いてるところが問題.
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
strings.xmlに文字列を格納してそれを呼び出す
- values/string.xmlを開く
- エディターで開くを押下,その後"+"ボタンを押下し,keyと値(文字列)を入力する.
- activity_main.xmlのButtonのテキストに,2.で追加したkeyと値があるので,選択する.
- 警告メッセージが消える
android:text="Button" ←これが
android:text="@string/next" ←こうなった
終わりに
- .gifで動画残しておくと操作分かりやすくて良いと思いました。過去の自分頑張ってた。
- 最新のAndroid Studio環境でJetpackComposeやりたい。