MJHD

エモさ駆動開発

Xamarin Androidで、AutoResizeするTextViewとButtonを作成する

Androidには便利な機能があり、LinearLayout使用時にそれぞれのウィジェットにWeight(重み)をつけることで、割合をベースにしたレイアウトを作成することができる。
これを使うことで、デバイスのサイズにとらわれずにレイアウトを作成することができる。iOSでいうAutoLayoutみたいな感じ。

問題点

ただ、TextViewやButtonなどのテキスト系は、フォントサイズが自動でリサイズされないため、画面の小さなデバイスなどでは見切れてしまうなどといった問題が起こる。
stackoverflowに、Javaで作成する場合のサンプルコードは載っているのだが、今回使用するのはXamarin。C#で書き直さなければならない。
android - Auto Scale TextView Text to Fit within Bounds - Stack Overflow

実は、Xamarin ForumnにC#移植版のコードが載っているのだが、一部ミスがあるため、常に最小値で表示されてしまう。
AutoResizeTextView — Xamarin Forums
備忘録として、修正したコードをまとめる。

AutoResizeTextView

gistbf77480062f5db26e1fab85a9f78ca17

AutoResizeButton

AndroidのButtonは、TextViewを継承しているため、同様の変更を加えることでAutoResizeに対応できた。

gist350d67001087124d0d85edf6e37851f4