2024/08/15

[Vuetify3] custom icon を追加する

公式の説明が少し分かりづらいのですが、Vuetify3 には icon の設定方法が2つ1あります。

  • 「MDI - CSS」は全 MDI fornt を一括でインストールする方法
  • 「MDI - JS SVG」は必要な font だけをインストールする方法

当然、後者の方が効率も良いしお勧めなのですが、公式が書いていないメリットがもう一つあります。

「MDI - JS SVG」の方は custom icon の表示が超楽なのです。

2023/09/13

[Vite] マルチページを作成した際は rewrite を正しく設定しなければならない

Vite では、以下のように rollupOptions.input を指定することでマルチページアプリケーションを作ることが可能です。

vite.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
export default defineConfig({
  // 省略
  build: {
    rollupOptions: {
      input: {
        main: resolve(__dirname, 'src/main/index.html'),
        admin: resolve(__dirname, 'src/admin/index.html'),
        user: resolve(__dirname, 'src/user/index.html'),
      },
    },
  },
});

場合によっては便利なのですが、この設定をした上で Vue Router のようなルーティング機能を使うと問題がおこるので注意しなければなりません。

例えば main 以下に /main/users/1200 のようなサブページを作りたい場合、ルーターの設定をしただけでは動かないはずです。

この場合、サーバーは /main/users/1200 などというページが存在しないので、特定のページに rewrite します。 これが、 Vite の dev server の場合、デフォルトで /index.html なのです。つまり、そんなページは存在しないとエラーを吐かれてしまいます。

これを、 /main.html に rewrite するよう、設定を変更しなければなりません。

2023/01/05

Android の権限ダイアログで2度「許可しない」が選択されたことを検知する方法

Android 6.0 (API Level 23) 以降、マイクの使用許可などプライバシーに関わるような権限はアプリの中から個別に許可を求めなければいけなくなりました。具体的には以下のようなコードを実行すると上記のようなダイアログが表示されます1。(permissionLauncher の実装は後半を参照)

1
2
3
4
5
6
val granted = ContextCompat.checkSelfPermission(
    requireContext(), Manifest.permission.RECORD_AUDIO
)
if (granted != PackageManager.PERMISSION_GRANTED) {
    permissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
}

以前は毎回このコードを実行することでダイアログを表示することが出来ていたのですが、Android 11 (API Level 30) 以降、ユーザーが2度「許可しない」を選択すると、次からはダイアログが表示されなくなってしまいました。

2021/07/17

Android の Stroke を特定の辺だけにする

【Android】特定の辺だけにstrokeをつけたい にあるように、特定の辺の stroke を実現するにはコードでの実装が必要という認識だったのですが、最近になって InsetDrawable が XML で使用できることを知って1、これを使えば XML だけで stroke を消せるのではないかと思い、やってみました。

2020/03/11

by ViewModels() を使って ViewModel を取得する方法

以前は以下のように ViewModelProviders を使用して ViewModel を取得していましたが、この方法は Deprecated になりました。

1
val myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)

ドキュメントを見てみると、代わりに kotlin の委譲 by viewModels()、もしくは ViewModelProvider1 を使ってね。と書いてあります。

ところが、by viewModels() はどう使うのかが、何処にも書いてありません2

そこで、ネットの情報とコードを参考に使ってみました。