如何在Android 4.4+上运行时忽略Cordova App的字体大小设置更改?

时间:2014-10-13 08:37:01

标签: android jquery cordova android-4.4-kitkat

我使用Cordova版本3.6.3和JQuery开发了Cordova App。我仍然无法获得最佳解决方案的唯一问题是当我在Android 4.4+上测试我的应用程序时,有些用户喜欢在设置中更改字体大小>显示>他们的设备的字体大小比正常大。它导致我的应用程序布局显示丑陋(最好的显示是当字体大小设置正常时)。但是对于早于4.4(4.3,4.2 ...)的Android,字体大小设置没有任何影响因此该应用程序在旧版本上完美显示。

我应用到我的应用程序的解决方案是创建自定义插件来检测更改的配置,它将检测用户是否使用Android 4.4+,如果他们将字体大小设置设置为任何不正常的,我会使用JQuery将font-size强制为指定的大小。

示例是......

if (font_scale == huge)
{
    $("div").css("font-size","20px !important");
}

这样可以正常工作但有时在页面加载后,css不会像我想要的那样改变。并且假设如果该页面上有30个div +,那么我必须插入上述语句30次,并且不必要地花费太多时间。

我只是想知道,有没有其他方法来解决这个问题比使用这个插件更容易?也许使用一些XML配置或CSS3属性可以使我的应用程序正常显示而没有Android 4.4的字体大小设置的副作用?

我尝试的其他方法也不起作用

  1. 在Androidmanifest.xml上插入fontScale>活动标签
  2. 插入webkit-text-size-adjust:none;在css
  3. 我很想听到有助于解决此问题的任何想法。

6 个答案:

答案 0 :(得分:6)

所以你只想忽略系统字体首选项。 这是解决方案,我使用MobileAccessibilty Plugin来忽略系统字体首选项。

您只需在index.js

中的onDeviceReady函数中编写以下代码即可
if(window.MobileAccessibility){
    window.MobileAccessibility.usePreferredTextZoom(false);
}

usePreferredTextZoom(false)将忽略系统字体首选项。 :) :) :))

答案 1 :(得分:3)

尝试从index.html中删除此内容:

<强>目标densitydpi =设备dpi的

祝你好运。

答案 2 :(得分:1)

这是一个新的解决方案,希望它可以为您提供帮助。 Solution

 //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());
}

答案 3 :(得分:1)

我希望这会有所帮助!

在Cordova 8.0中:

编辑MainActivity.java

在文件标题中添加引用:

import android.webkit.WebView;
import android.webkit.WebSettings;

在loadUrl方法之后添加代码:

loadUrl(launchUrl);

WebView webView = (WebView)appView.getEngine().getView();
WebSettings settings = webView.getSettings();

settings.setTextSize(WebSettings.TextSize.NORMAL);

只有这种方式对我有用。

答案 4 :(得分:0)

  1. 如果您的插件允许您知道字体比例,请将所有字体大小更改为em并使用 $(document.body).css("font-size","70%"); 只有一次。

  2. 你介意分享你的插件吗?

答案 5 :(得分:0)

这已经很老了,但是由于我在2019年仍然需要​​它,所以其他人也可能需要它。

如果出于某种原因您不希望(或无法)为单个功能集成整个插件,请提取以下usePreferredTextZoom(false)功能(它来自于基于Cordova的MobileFirst 7.1应用)。当然,所有功劳归功于开发该插件的人。

在您的Cordova Android应用程序的主Java文件中,通过添加onInitWebFrameworkComplete方法调用来更改preventDeviceZoomChange()方法:

public void onInitWebFrameworkComplete(WLInitWebFrameworkResult result){
    if (result.getStatusCode() == WLInitWebFrameworkResult.SUCCESS) {
        super.loadUrl(WL.getInstance().getMainHtmlFilePath());
        preventDeviceZoomChange();
    } else {
        handleWebFrameworkInitFailure(result);
    }
}

在同一类中,定义preventDeviceZoomChange()方法:

private void preventDeviceZoomChange() {
    try {
        Method getSettings = (this.appView).getClass().getMethod("getSettings");
        Object wSettings = getSettings.invoke(this.appView);
        Method setTextSize = wSettings.getClass().getMethod("setTextSize", WebSettings.TextSize.class);
        setTextSize.invoke(wSettings, WebSettings.TextSize.NORMAL);
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch(Exception e) {
        e.printStackTrace();
    }
}