#アプリを作っていたらレイアウトがおかしくなってた話
しばらくAndroid アプリを作っているとレイアウトが変わっていることに気が付きました。何故だろうと調べてみると警告文が出ていて、要約すると「レイアウトの制約を付けないと座標(0,0)に配置するからな。覚悟しろよ。」とのことでした(考えなしに作るからこうなる)。layout_editor_absoluteX などのデザイン時属性は実行時に適用されないため、設定と異なる場所に配置されるからパーツごとに水平方向、垂直方向に制約を付けてほしいとのこと。かしこまっ!
#さっそくレイアウト制約をつけてみる
まず、[Palette]→[Layouts]を開きます。すると色々と種類がありますが、基本的には、
- Relative Layout
- Linear Layout
- Frame Layout
の3種類を使えば良さそうです。
たぶんやり方は色々あると思いますが何が正しいとかわからないので、自分流のやり方を書いときます。
###1.一番外側にRelative Layout を配置する
Relative LayoutはView間の相対位置から配置を決定するので、外枠をRelative Layoutとして作業するようにします。
Relative Layoutを作成した後、Layout内で基準となるViewを1つ決定して他のViewを追加していきます。
###2.Viewを整列させたい時はLinear Layout
Linear LayoutはViewを垂直または水平方向に配置を決定するので、ウィジットなどのタッチ操作が必要なものを等間隔に整列して配置したいときに使います。Table Layout もLinear Layoutを使えば作れそう。
###3.あるViewに別のViewを重ねるときはFrame Layout
個人的にはあまり使わなそうですが、あるViewの上に別のViewを重ねたいときはFrame Layoutを使います。例えば、Image上にボタンを配置する時に使うそうです。
###4. 大まかな指定の後はLatoutの属性の変更
Viewは階層構造のようになっておりLayout内のどの位置に配置するかを属性として記述します。
全部の属性について述べるのはとても面倒なので、こちらを参照してください。(この記事よりだいぶ詳しいので......)
今さら聞けないRelativeLayoutの話
#そういえば話題にしていなかった作っているもの
今まで1,2と記事を書いてきましたが、今まで僕が何を作っているのか話していませんでした。僕の趣味の話なんですが、TRPGを趣味にしていて、オフセの時に既存のスマホアプリでキャラシートを管理してダイスを振っていました。その時に最初は良かったのですが、そのうち使いづらいなと思うことが増えてきたのでいっそのこと自分で作ってしまおうというのがきっかけで作業をしています。
使いたい・作りたい機能を挙げると、
- キャラ作成、管理
- セッションの部屋の作成
- 手書きメモ帳と共有(WiFi Directとかいうのがあるらしい)
- ダイス機能とダイスログの作成
といった感じです。まだまだ未熟ですが少しずつ進めていきます。
追伸 幕間みたいなものなので短くてごめんなさい。