web-dev-qa-db-ja.com

プログラムでアプリケーション全体のフォントサイズを変更するにはどうすればよいですか、Android?

「8」から「46」までのフォントサイズのリストを使用してSpinnerを作成しました。フォントサイズをクリックすると、スピナーに表示されます。

スピナー内のフォントサイズ「26」をクリックすると、プロジェクト全体に適用される必要があります。画面、テキストビューの外観、編集テキスト-太字/斜体などに適用するのと同じです。46サイズをクリックすると、プロジェクト全体に適用されます。

プログラムでこれを行うにはどうすればよいですか?

19
Achiever

考えられる解決策は、基本クラスを作成 which TextViewを拡張であり、このテキストビュークラスを編集テキストとして使用します。あなたが最初の画面でサイズを求めていることを願っています。いずれにせよ、uは基本クラスのテキストサイズを設定します。これはあなたの問題を解決します。

たとえば、このクラスをパッケージcom.exampleに作成し、クラス名をBaseTextViewにすると、<TextView .../>の代わりにxmlファイルに<com.example.BaseTextView ... />と記述します。

お役に立てれば。

2
Android

Androidドキュメントは、アプリケーションレベルでのユーザーの選択を通じて、フォントサイズをグローバルに変更する最も効率的な方法に固有のものではありません。

Black Devilによって与えられた answer に問題があると思います。

問題は、AndroidTextViewButtonなどのRadioButtonウィジェットのサブクラスCheckBoxの多くです。これらの一部はTextViewの間接的なサブクラスであるため、これらのクラスにTextViewのカスタマイズされたバージョンを実装することは非常に困難です。

ただし、Siddharth Leleがコメントで指摘しているように、stylesまたはthemesを使用する方が、テキストサイズの変更を処理するためのはるかに優れた方法です。アプリ。

ビューのルックアンドフィールを制御するために、レイアウトのスタイルを設定します。テーマは基本的にこれらのスタイルの単なるコレクションです。ただし、テキストサイズの設定にのみテーマを使用できます。すべてのプロパティの値を定義せずに。スタイルよりもテーマを使用すると、1つの大きな利点が得られます。それは、プログラムでビュー全体のテーマを設定できることです。

theme.xml

<resources>
    <style name="FontSizeSmall">
        <item name="Android:textSize">12sp</item>
    </style>
    <style name="FontSizeMedium">
        <item name="Android:textSize">16sp</item>
    </style>
    <style name="FontSizeLarge">
        <item name="Android:textSize">20sp</item>
    </style>
</resources>

プリファレンスのロードを処理するクラスを作成します。

public class BaseActivity extends Activity {
    @Override
    public void onStart() {
        super.onStart();

        // Enclose everything in a try block so we can just
        // use the default view if anything goes wrong.
        try {
            // Get the font size value from SharedPreferences.
            SharedPreferences settings =
                getSharedPreferences("com.example.YourAppPackage", Context.MODE_PRIVATE);

            // Get the font size option.  We use "FONT_SIZE" as the key.
            // Make sure to use this key when you set the value in SharedPreferences.
            // We specify "Medium" as the default value, if it does not exist.
            String fontSizePref = settings.getString("FONT_SIZE", "Medium");

            // Select the proper theme ID.
            // These will correspond to your theme names as defined in themes.xml.
            int themeID = R.style.FontSizeMedium;
            if (fontSizePref == "Small") {
                themeID = R.style.FontSizeSmall;
            }
            else if (fontSizePref == "Large") {
                themeID = R.style.FontSizeLarge;
            }

            // Set the theme for the activity.
            setTheme(themeID);
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }

最後に、次のようにBaseActivityを拡張してアクティビティを作成します。

public class AppActivity extends BaseActivity{
}

ほとんどのアプリケーションには、TextViewまたはTextViewを継承するウィジェットよりもはるかに少ないアクティビティがあります。これは、複雑さが増すにつれて指数関数的になるため、このソリューションではコードの変更が少なくて済みます。

おかげで Ray Kuhnell

23
Ritesh Gune

基本アクティビティ構成を使用してアプリのテキストサイズに拡大/縮小し、すべてのアクティビティを固有の基本アクティビティにすることができます。

スケールの通常の値は1.0、2.0はフォントサイズの2倍、.50は半分になります。

public  void adjustFontScale( Configuration configuration,float scale) {

    configuration.fontScale = scale;
    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());
}
7
Usama Saeed US

関数を作成し、スピナーサイズの値を次のように渡します

void setSize(int size){
...
setTextSize()
// on All of the layout texts and views on screen

}

画面上のすべてのビューとレイアウトテキストでsetTextSize()を呼び出します。

ドキュメントをチェックしてください ここ

0
Rajeev N B

すべてのコンポーネント(アプリケーション全体を意味する)のフォントサイズをスケーリングするために、いくつかのデバイスを介して実装およびテストされる非常に優れたアプローチがあります。このソリューションは、次のような場合に適用できます。 dpサイズ単位を静的に宣言し(デフォルトではAndroid sp)、目的のフォントサイズにスケーリングします。

解決策は answerUsama Saeed USによって与えられたものに似ていますが、すべてのバグのあるケースをカバーします。

フォントサイズをスケーリングする静的utilメソッドを宣言します。

    //LocaleConfigurationUtil.class
    public static Context adjustFontSize(Context context){
        Configuration configuration = context.getResources().getConfiguration();
        // This will apply to all text like -> Your given text size * fontScale
        configuration.fontScale = 1.0f;

        return context.createConfigurationContext(configuration);
    }

すべてのアクティビティで、attachBaseContextをオーバーライドし、onCreateでutilメソッドを呼び出します。

   @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(LocaleConfigurationUtil.adjustFontSize(newBase));
    }

   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LocaleConfigurationUtil.adjustFontSize(this);
    }

フラグメントを使用している場合は、onAttachメソッドをオーバーライドします

@Override
public void onAttach(Context context) {
super.onAttach(LocaleConfigurationUtil.adjustFontSize(context));
}