23

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

私の必要性は、スピナー内のフォントサイズ「26」をクリックすると、プロジェクト全体に適用されるはずです。画面、Textviewの外観、Edittext-太字/斜体などに適用するのと同じです。46サイズをクリックすると、プロジェクト全体に適用されます。

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

4

6 に答える 6

31

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

ブラックデビルの答えには問題があると思います。

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

ただし、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を継承するウィジェットよりもはるかに少ない数のアクティビティがあります。これは、複雑さが増すにつれて指数関数的になるため、このソリューションではコードの変更が少なくて済みます。

RayKuhnellに感謝します

于 2014-07-04T09:51:23.957 に答える
23

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

スケールの通常の値は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());
}
于 2018-04-07T18:09:26.253 に答える
5

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

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

お役に立てれば。

于 2012-10-03T10:12:54.077 に答える
0

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

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

}

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

こちらのドキュメントをご覧ください

于 2012-10-03T08:06:20.873 に答える
0

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

解決策は、 Usama 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));
}
于 2020-03-04T18:11:51.797 に答える
-1

それが役立つかどうかはわかりません。しかし、「SSP」と呼ばれるものがあります。これは、テキスト用のスケーラブルなサイズの単位です。これをビルドgradleに追加します

implementation 'com.intuit.ssp:ssp-android:1.0.6'

そしてこれを使う

android:textSize="@dimen/_22ssp"

https://github.com/intuit/ssp

于 2020-08-19T02:30:54.297 に答える