在Android中更改整个应用程序的字体

拉沙德

所以在问这个问题之前,我先做了一些研究,因为我知道有很多关于这个主题的文章。但是我发现有关更改整个应用程序字体的解决方案仅限于textview,而不是例如动作栏和菜单。我也知道如何更改这些字体(在每个活动中),但是这是在运行时完成的,因此当我使用以下代码(例如)更改菜单项的字体时,我注意到文本从默认字体更改到自定义字体。我的问题是,是否有更好的方法可以做到这一点

  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.mainpage, menu);


        getLayoutInflater().setFactory(new Factory() {
            public View onCreateView(String name, Context context,
                                     AttributeSet attrs) {

                if (name.equalsIgnoreCase("TextView")) {
                    try {
                        LayoutInflater li = LayoutInflater.from(context);
                        final View view = li.createView(name, null, attrs);
                        new Handler().post(new Runnable() {
                            public void run() {

                                if(MainActivitySharedPref.GetValue(getApplicationContext(), "Language").equals("ar")) {
                                    Typeface font = Typeface.createFromAsset(getAssets(), getString(R.string.arabic_font_name));
                                    ((TextView) view).setTypeface(font);
                                    ((TextView) view).setTextSize(22);
                                }
                            }});
                        return view;
                    } catch (Exception e) {Log.e(TAG, "[ERROR] an InflateException was thrown: " + e.getMessage());}
                }
                if (name.equalsIgnoreCase("Button")) {
                    try {
                        LayoutInflater li = LayoutInflater.from(context);
                        final View view = li.createView(name, null, attrs);
                        new Handler().post(new Runnable() {
                            public void run() {

                                if(MainActivitySharedPref.GetValue(getApplicationContext(), "Language").equals("ar")) {
                                    Typeface font = Typeface.createFromAsset(getAssets(), getString(R.string.arabic_font_name));
                                    ((Button) view).setTypeface(font);
                                    ((Button) view).setTextSize(22);
                                }
                            }
                        });
                        return view;
                    } catch (Exception e) { Log.e(TAG, "[ERROR] an InflateException was thrown: " + e.getMessage());}
                }
                return null;
            }

        });

        return true;
    }
拉沙德

由于我没有答案,因此我将发布解决自定义字体出现之前先加载默认字体的问题的解决方法。(在菜单项中...)我将代码放在OnCreate方法中,并删除了运行功能。

        LayoutInflater layoutInflater = getLayoutInflater();
        final LayoutInflater.Factory existingFactory = layoutInflater.getFactory();
        // use introspection to allow a new Factory to be set
        try {
            Field field = LayoutInflater.class.getDeclaredField("mFactorySet");
            field.setAccessible(true);
            field.setBoolean(layoutInflater, false);
            getLayoutInflater().setFactory(new LayoutInflater.Factory() {
                public View onCreateView(String name, Context context,
                                         AttributeSet attrs) {

                    if (name.equalsIgnoreCase("TextView")) {
                        try {

                            LayoutInflater li = LayoutInflater.from(context);
                            final View view = li.createView(name, null, attrs);
//                            new Handler().post(new Runnable() {
//                                public void run() {

                            if (MainActivitySharedPref.GetValue(getApplicationContext(), "Language").equals("ar")) {
                                Typeface font = Typeface.createFromAsset(getAssets(), getString(R.string.arabic_font_name));

                                ((TextView) view).setTypeface(font);
                                ((TextView) view).setTextSize(22);
                            }
//                                }
//                            });
                            return view;
                        } catch (Exception e) {
                            Log.e(TAG, "[ERROR] an InflateException was thrown: " + e.getMessage());
                        }
                    }

                    if (name.equalsIgnoreCase("Button")) {
                        try {
                            LayoutInflater li = LayoutInflater.from(context);
                            final View view = li.createView(name, null, attrs);
//                            new Handler().post(new Runnable() {
//                                public void run() {
//                                    // set the text color
                            if (MainActivitySharedPref.GetValue(getApplicationContext(), "Language").equals("ar")) {
                                Typeface font = Typeface.createFromAsset(getAssets(), getString(R.string.arabic_font_name));
                                ((Button) view).setTypeface(font);
                                ((Button) view).setTextSize(22);
                            }
//                                }
//                            });
                            return view;
                        } catch (Exception e) {
                            Log.e(TAG, "[ERROR] an InflateException was thrown: " + e.getMessage());
                        }
                    }
                    return null;
                }

            });
        }catch(Exception e){}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android更改整个应用程序的字体

来自分类Dev

更改整个应用程序的字体

来自分类Dev

如何更改整个wxPython应用程序的字体

来自分类Dev

更改整个应用程序的比例和字体大小

来自分类Dev

需要能够在整个应用程序中更改字体大小,以实现可访问性

来自分类Dev

在整个应用程序中更改imageview

来自分类Dev

在Android应用程序中更改字体会使应用程序崩溃-无法制作本机字体

来自分类常见问题

如何在Android中为整个应用程序设置自定义字体?

来自分类Dev

如何在android studio中的android应用程序中更改默认字体

来自分类Dev

如何更改Android应用程序的默认字体?

来自分类Dev

在Application类中更改整个应用程序的主题

来自分类Dev

在整个应用程序中更改导航项的颜色?

来自分类Dev

如何在整个DataGrid应用程序中更改SystemColors

来自分类Dev

在闪亮的应用程序侧面板中更改字体颜色

来自分类Dev

如何在Java GUI应用程序中更改字体?

来自分类Dev

如何更改括号中的应用程序字体大小

来自分类Dev

更改整个应用程序所有textview的字体,包括按钮和edittexts

来自分类Dev

通过代码更改整个应用程序或活动的字体颜色(java)

来自分类Dev

更改整个应用程序所有textview的字体,包括按钮和edittexts

来自分类Dev

在android应用程序中更改语言

来自分类Dev

更改整个本机应用程序的语言

来自分类Dev

更改整个应用程序的背景

来自分类Dev

如何检测整个应用程序是否在android中关闭

来自分类Dev

Android Studio应用程序中的Google字体?

来自分类Dev

如何在Android中设置应用程序范围的字体?

来自分类Dev

整个应用程序中的字体和颜色发生变化

来自分类Dev

如何在棒棒糖中为整个应用程序设置自定义字体

来自分类Dev

如何增加整个应用程序的字体大小?

来自分类Dev

适用于整个应用程序的Roboto字体

Related 相关文章

  1. 1

    Android更改整个应用程序的字体

  2. 2

    更改整个应用程序的字体

  3. 3

    如何更改整个wxPython应用程序的字体

  4. 4

    更改整个应用程序的比例和字体大小

  5. 5

    需要能够在整个应用程序中更改字体大小,以实现可访问性

  6. 6

    在整个应用程序中更改imageview

  7. 7

    在Android应用程序中更改字体会使应用程序崩溃-无法制作本机字体

  8. 8

    如何在Android中为整个应用程序设置自定义字体?

  9. 9

    如何在android studio中的android应用程序中更改默认字体

  10. 10

    如何更改Android应用程序的默认字体?

  11. 11

    在Application类中更改整个应用程序的主题

  12. 12

    在整个应用程序中更改导航项的颜色?

  13. 13

    如何在整个DataGrid应用程序中更改SystemColors

  14. 14

    在闪亮的应用程序侧面板中更改字体颜色

  15. 15

    如何在Java GUI应用程序中更改字体?

  16. 16

    如何更改括号中的应用程序字体大小

  17. 17

    更改整个应用程序所有textview的字体,包括按钮和edittexts

  18. 18

    通过代码更改整个应用程序或活动的字体颜色(java)

  19. 19

    更改整个应用程序所有textview的字体,包括按钮和edittexts

  20. 20

    在android应用程序中更改语言

  21. 21

    更改整个本机应用程序的语言

  22. 22

    更改整个应用程序的背景

  23. 23

    如何检测整个应用程序是否在android中关闭

  24. 24

    Android Studio应用程序中的Google字体?

  25. 25

    如何在Android中设置应用程序范围的字体?

  26. 26

    整个应用程序中的字体和颜色发生变化

  27. 27

    如何在棒棒糖中为整个应用程序设置自定义字体

  28. 28

    如何增加整个应用程序的字体大小?

  29. 29

    适用于整个应用程序的Roboto字体

热门标签

归档