メソッドの上部で option + command + /
を入力すると、自動でドキュメンテーションコメントが追加されます。
あとで見返すときのために、「何をするメソッドか」「引数にはどんな値が必要か、どういう値が想定されているか」「戻り値は何か」などを記入しておきましょう。
メソッドの上部で option + command + /
を入力すると、自動でドキュメンテーションコメントが追加されます。
あとで見返すときのために、「何をするメソッドか」「引数にはどんな値が必要か、どういう値が想定されているか」「戻り値は何か」などを記入しておきましょう。
どうも。どっことです。今回は共有ボタンの実装について解説します。
X(旧:Twitter)でのポストやブログの記事など、Webにはいたる所に共有ボタンがあります。今回は共有ボタンによりデータが送信された時にアプリ側でそれを受け取るための実装と、アプリで共有ボタンを用意する実装をそれぞれ解説していきます。
よくあるBroadcastReceiverの実装パターンです。2つやることがあります。
1つは、AndroidManifest.xml
に共有ボタンによるデータ送信のintent
を受け取る宣言を明記します。
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
そしてもう一つは、実際に受け取った時の処理です。受け取るActivity
やBroadcastReceiver
に対してインテントフィルターを設定します。Activity
では、メンバ変数として持っているintent
を、BroadcastReceiver
ではBroadcastReceiver#onReceived
の引数として渡されるintent
を参照することで、詰められているデータにアクセスすることができます。
override fun onCreate(savedInstanceState: Bundle?) {
if (intent?.action == Intent.ACTION_SEND) {
val text = intent.getStringExtra(Intent.EXTRA_TEXT)
// 良しなにする
}
}
こちらもよくあるstartActivity(Intent)
の実装です。
ただintent
の作り方だけちょっと独特で、共有したいデータを詰めたintent
をIntent#createChooser
に渡します。そうして返されたintent
をstartActivity
で投げます。
val temp: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "テストのテキストです")
type = "text/plain"
}
startActivity(Intent.createChooser(temp, null))
今回は共有ボタンに関するAndroidの実装を解説しました。特に共有ボタンからデータを受け取る処理はアプリを利用してもらう契機として重要なので、参考にしていただけると幸いです。
sudo gem install cocoapods
または
sudo gem install -n /usr/local/bin cocoapods
インストール完了後、各プロジェクトで利用するためにCocoaPodをセットアップする。
pod setup
その後プロジェクトフォルダでコンソールを開いて以下コマンドを実行する。
pod init
これにより、Podfile
が自動生成される。
自動生成されたPodfile
に必要なライブラリの記述し以下を実行。
pod install
初回は上記、2回目以降は以下を使う。
pod update
これにより、.xcworkspace
という拡張子のファイルが生成される。Xcode
でプロジェクトを開くときはこのファイルをクリックして開く。
どうも。どっことです。Macでスクリーンショットを撮影したいけど、ショートカットキーを忘れて毎回検索しているので、備忘録として紹介します。
Shift + command + 3
Windowsの printscreen
Shift + command + 4
Windowsの Shift + win + s
Shift + command + 4 → Space
Windowsの alt + printscreen
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)
どうも。どっことです。 タイトルの通りですが、諸事情により GitHubPage に移行予定です。 https://mkt120.github.io/ この備忘録に記載の内容を転記しつつ、今後はこちらのページを更新していく予定です。