アプリケーションで独自のテキストサイズを指定したいのですが、これに問題があります。
デバイス設定でフォントサイズをTextView
変更すると、アプリケーションのフォントサイズも変更されます。
アプリケーションで独自のテキストサイズを指定したいのですが、これに問題があります。
デバイス設定でフォントサイズをTextView
変更すると、アプリケーションのフォントサイズも変更されます。
回答:
実際、設定のフォントサイズはのサイズにのみ影響しsp
ます。定義-すべてのようにあなたは何をする必要があるtextSize
でdp
するのではなくsp
、その後の設定はアプリ内のテキストのサイズを変更しません。
ここではドキュメントへのリンクです:外形寸法
ただし、予想される動作は、すべてのアプリのフォントがユーザーの設定を尊重することであることに注意してください。ユーザーがフォントサイズを調整したい理由はたくさんありますが、中には医学的である視覚障害者もいます。forテキストのdp
代わりにsp
を使用すると、アプリの一部のユーザーを不本意に差別する可能性があります。
つまり:
android:textSize="32dp"
sp
、いつ使うべきか、いつ使うべきかというルールがあるかどうか知りたかったdp
。私はここで本当に良い反応を得た:stackoverflow.com/questions/11638691/...
そのための最も簡単な方法は、次のようなものを使用することです。
android:textSize="32sp"
textSize
プロパティについて詳しく知りたい場合は、Androidデベロッパードキュメントをご覧ください。
リソース(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
、システムはデフォルト値を使用します。
アプリ全体がシステムのフォントサイズの影響を受けないようにする簡単な方法は、基本アクティビティを使用してupdateConfigurationを実行することです。
//in base activity add this code.
public void adjustFontScale( Configuration configuration) {
configuration.fontScale = (float) 1.0;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adjustFontScale( getResources().getConfiguration());
}
これは役立つかもしれません。カスタムアプリケーションまたはBaseActivityにコードを追加する
/**
* 重写 getResource 方法,防止系统字体影响
*
* @return
*/
@Override
public Resources getResources() {
Resources resources = super.getResources();
if (resources != null && resources.getConfiguration().fontScale != 1) {
Configuration configuration = resources.getConfiguration();
configuration.fontScale = 1;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
return resources;
}
ただし、Resource#updateConfigurationはAPIレベル25で複製されます。つまり、将来的にはサポートされなくなります。
使用されている単位がDPではなくSPであり、システムフォントスケーリングをオーバーライドする場合は、アクティビティで1つのメソッドをオーバーライドするだけです。この投稿を参照してください。
resources.updateConfigurationは非推奨でバグがあります(Oreoではフォーマットされたテキストに問題がありました)。
Android 8では、この解決策は私にとってうまくいきます
このコードを基本アクティビティに追加します
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
final Configuration override = new Configuration(newBase.getResources().getConfiguration());
override.fontScale = 1.0f;
applyOverrideConfiguration(override);
}