アプリケーションで独自のテキスト サイズを指定したいのですが、これを行うのに問題があります。
デバイス設定でフォント サイズを変更すると、アプリケーションのフォント サイズTextView
も変更されます。
アプリケーションで独自のテキスト サイズを指定したいのですが、これを行うのに問題があります。
デバイス設定でフォント サイズを変更すると、アプリケーションのフォント サイズTextView
も変更されます。
実際、設定のフォントサイズは、のサイズにのみ影響しsp
ます。だからあなたがする必要があるのは-の代わりに定義textSize
することです、そうすれば設定はあなたのアプリのテキストサイズを変更しません。dp
sp
ドキュメントへのリンクは次のとおりです。寸法
ただし、予想される動作は、すべてのアプリのフォントがユーザーの設定を尊重することであることに注意してください。ユーザーがフォントサイズを調整したいと思う理由はたくさんあり、そのうちのいくつかは医療でさえあるかもしれません-視覚障害のあるユーザー。dp
テキストの代わりに使用するsp
と、アプリのユーザーの一部を不本意に差別する可能性があります。
すなわち:
android:textSize="32dp"
リソース ( DOCS ) を使用するように、リソースのdimension
タイプを使用します。string
dimens.xml
ファイルで、ディメンション変数を宣言します。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_height">25dp</dimen>
<dimen name="textview_width">150dp</dimen>
<dimen name="ball_radius">30dp</dimen>
<dimen name="font_size">16sp</dimen>
</resources>
次に、これらの値を次のように使用できます。
<TextView
android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/font_size"/>
dimens.xml
画面のタイプごとに異なるファイルを宣言できます。これを行うと、さまざまなデバイスでアプリの望ましい外観が保証されます。
指定しない場合android:textSize
、システムはデフォルト値を使用します。
dimen.xml ファイルで既に定義されている場合に、コードで DIP または SP を再度指定する必要があるのは良いことではありません。
dimen.xml 値を使用する場合は、PX を使用するのが最適なオプションだと思います。
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));
このようにして、コードを変更することなく、必要に応じて dimen.xml ファイルで DP から SP に切り替えることができます。
このソリューションは Kotlin を使用しており、非推奨の関数 resources.updateConfiguration を使用していません。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
adjustFontScale(resources.configuration)
}
private fun adjustFontScale(configuration: Configuration?) {
configuration?.let {
it.fontScale = 1.0F
val metrics: DisplayMetrics = resources.displayMetrics
val wm: WindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
wm.defaultDisplay.getMetrics(metrics)
metrics.scaledDensity = configuration.fontScale * metrics.density
baseContext.applicationContext.createConfigurationContext(it)
baseContext.resources.displayMetrics.setTo(metrics)
}
}
観察: これは上記と同じ解決策ですが、Kotlin で更新されています
DP を sp に変更します。これは、android android:textSize="18sp" に適しています。