194

アプリケーションで独自のテキスト サイズを指定したいのですが、これを行うのに問題があります。

デバイス設定でフォント サイズを変更すると、アプリケーションのフォント サイズTextViewも変更されます。

4

15 に答える 15

257

実際、設定のフォントサイズは、のサイズにのみ影響しspます。だからあなたがする必要があるのは-の代わりに定義textSizeすることです、そうすれば設定はあなたのアプリのテキストサイズを変更しません。dpsp

ドキュメントへのリンクは次のとおりです。寸法

ただし、予想される動作は、すべてのアプリのフォントがユーザーの設定を尊重することであることに注意してください。ユーザーがフォントサイズを調整したいと思う理由はたくさんあり、そのうちのいくつかは医療でさえあるかもしれません-視覚障害のあるユーザー。dpテキストの代わりに使用するspと、アプリのユーザーの一部を不本意に差別する可能性があります。

すなわち:

android:textSize="32dp"
于 2012-11-07T07:22:22.550 に答える
52

リソース ( 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、システムはデフォルト値を使用します。

于 2012-11-07T07:27:58.230 に答える
15

dimen.xml ファイルで既に定義されている場合に、コードで DIP または SP を再度指定する必要があるのは良いことではありません。

dimen.xml 値を使用する場合は、PX を使用するのが最適なオプションだと思います。

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));

このようにして、コードを変更することなく、必要に応じて dimen.xml ファイルで DP から SP に切り替えることができます。

于 2014-12-10T11:02:23.007 に答える
2

このソリューションは 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 で更新されています

于 2020-07-29T19:39:40.177 に答える
1

DP を sp に変更します。これは、android android:textSize="18sp" に適しています。

于 2020-03-17T13:16:25.567 に答える