Androidでは、String.format(text, value)としてテキストを出力させるが、iOSの場合もほぼ同じでStringのコンストラクタに入れるだけ。
let number = 3
let numberString = String(format: "%03d", number) // 003
Androidでは、String.format(text, value)としてテキストを出力させるが、iOSの場合もほぼ同じでStringのコンストラクタに入れるだけ。
let number = 3
let numberString = String(format: "%03d", number) // 003
iOSでよくあるアラートダイアログを表示する。
let alert = UIAlertController(title: "タイトルテスト", message: "メッセージテスト", preferredStyle: .alert)
// ボタンを追加する
let action = UIAlertAction(title: "ボタン", style: .default, handler: { action in
/** do something **/
})
// 以下で、ボタンとそのタップ処理を追加する。ボタンは複数追加できる。
alert.addAction(action)
// 表示
present(alert, animated: true)
present
がライフサイクル上でコールするのが早すぎると無視されるので、viewDidAppear()
以降のタイミングで呼ぶこと。
enumの定義に、CaseIterable
を実装してあげるだけ。
enum Size: CaseIterable {
case maximum
case big
case medium
case small
case minimum
}
ってやると、allCases
にアクセスできるようになる
Size.allCases.map { /* do something. */ }
firstIndex
でインデックスもとれるようになる
Size.firstIndex(of: .big)!
どうも。どっことです。今回はApplication
クラスの実装方法について解説します。
アプリが動作するとき、一番最初に動き出すクラスです。このクラスにアプリの初期設定といった各種処理を実装します。外部のライブラリを利用する場合なども、Application
クラスのonCreate
メソッド内に処理を実装することが多いので、遅かれ早かれAndroidアプリエンジニアの誰もが通る道かと思います。今回はそんなApplication
クラスの実装方法について解説します。
以下の手順で実装します。
Application
クラスを継承したCustomApplication
クラスを追加するAndroidManifest.xml
にCustomApplication
クラスを登録する順番に解説していきます。
Application
クラスを継承したCustomApplication
を追加します。クラス名に制約は無いので、分かりやすい名前を命名してください。
class CustomApplication : Application() {
override fun onCreate() {
super.onCreate()
... // ライブラリの初期化やテーマの設定などやりたいことをやる
}
}
前手順で追加したCustomApplication
を登録します。AndroidManifest.xml
にあるapplication
タグにname
属性で、クラス名を設定してください。
<application
....
android:name=".CustomApplication">
<-- よくあるよしなに -->
</application>
あとはビルド+インストールし、アプリを起動してあげると、CustomApplication#onCreate()
の処理が最初に呼ばれます。Logなどを仕込んで、確認してみてください。
今回はApplication
クラスについて解説しました。テーマの設定や各種ライブラリの初期化など、アプリをよりカスタマイズするにあたり必要になっていくクラスなので、使えるようにしておきましょう。
「表示する領域のViewGroup
」に以下を設定する
android:clipChildren="false"
気を付けないといけないのは、領域外に押し込まれるViewの親ではなく、押し込まれた領域のViewGroupに設定する必要があるということ。つまり以下。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:clipChildren="false" <!-- 押し込まれる領域にclipChildren:falseを設定 -->
android:layout_height="match_parent">
<FrameLayout
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_gravity="center">
<View
android:layout_width="150dp"
android:layout_height="50dp"
android:layout_marginTop="-25dp" <!-- 親のFrameLayoutの領域外 -->
android:background="@android:color/black"
android:gravity="center" />
</FrameLayout>
</FrameLayout>
言われてみればそうか、と思うけどちょっと気持ち悪いと思うのは私だけだろうか。
引数付きString(format:, _ arguments)
のイニシャライザの使い方
let month = "12"
let day = "31"
let text = String(format: "%@月%@日", month, day)
print(text)
毎回毎回、
署名キー探して、
設定値を入力してビルドして
aabファイル生成して
プレイストアにアップロードして
ってフローが面倒になった。どうにかならないものか。
少なくても、署名キー探す~aabファイル生成するまでを自動化できることは知っているけど、例えばGitHubActionでやるなら生成したaabファイルや署名キーを秘匿にしないといけない都合でリポジトリも秘匿にしないといけないし、でもそれを秘匿にするのは正直あまりうれしくない(できるだけパブリックにしておきたい)。どうにかならないものか。
って考えたときに、「ソースを管理する領域(GitHub)とaabファイル生成をする領域を別にすればいいんじゃん。そうすればソースはパブリックのままでいいし、署名キーやら生成したaabファイルやらも秘匿の状態を保てる。とても幸せやん。」と気づいた。
上記を整理すると以下のフローとなる。
素敵だ。上記フローを実現するために必要な調査は★1,2の内容。
まあ、「そんなのありません」ってことはないんだろうけどね。特に★1については「サービスとしてはあるけど、有料会員様限定のサービスなんすよ」かもしれないし。
というわけで、考えていることでした。調査した結果とか、更新があればまた改めて投稿します。
Xcodeのプロジェクトで設定した証明書ファイル群にデバッグビルドによるビルドができるような設定になっていない。
どうも。どっことです。今回はXML上でクリックリスナーを設定する実装方法について解説します。
dataBinding
では、XMLでクリックリスナーを設定する処理はよくある実装ですが、実はdataBinding
を使わない通常のケースでも似たような実装をすることができます。
XMLでクリックリスナーを設定するには、任意のViewに対して
android:onClick
を設定してあげます。たとえば、TextView
に設定するときは以下のような形です。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="テスト"
android:onClick="testClicked" />
あとはこのXMLを読み込むクラスに、testClicked(View v)
関数を実装します。
override fun testClicked(v: View) {
Log.d("TAG", "TextView テスト is clicked")
}
今回設定したonClick
の値はtestClicked
なのでそれに合わせていますが、実際に利用する際はTextView
がどんな表示をしているかなどを表現した関数名にしてあげると後々にコードを追いやすくなるかと思います。
今回はXMLでクリックリスナーを設定する実装方法について解説しました。dataBinding
でも似たような実装方法があると思いますが、そうでなくてもシンプルに利用することができるので、参考にしていただけると幸いです。
どうも。どっことです。 タイトルの通りですが、諸事情により GitHubPage に移行予定です。 https://mkt120.github.io/ この備忘録に記載の内容を転記しつつ、今後はこちらのページを更新していく予定です。