2010-11-15 4 views
5

Как вы можете настроить размер шрифта для Android WebView? Далее, кажется, не имеют никакого эффекта:Настройка размера шрифта Android WebView

private void fontSizePlus() { 
    fontSize = (fontSize < FONT_SIZE_MAX) ? fontSize + FONT_SIZE_INCREMENT : fontSize; 
    this.changeFontSize(fontSize); 
} 

private void fontSizeMinus() { 
    fontSize = (fontSize > FONT_SIZE_MIN) ? fontSize - FONT_SIZE_INCREMENT : fontSize; 
    this.changeFontSize(fontSize); 
} 

private void changeFontSize(int value) { 
    String js = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '" + value + "%';"; 
    mWebView.loadUrl("javascript:(function() { " + js + " })()"); 
} 

Где WebView и константы неинициализированному следующим образом:

private final static int FONT_SIZE_DEFAULT = 100; 
private final static int FONT_SIZE_MIN = 50; 
private final static int FONT_SIZE_MAX = 150; 
private final static int FONT_SIZE_INCREMENT = 5; 
private int fontSize = FONT_SIZE_DEFAULT; 

private WebView mWebView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.index); 
    mWebView = (WebView) findViewById(R.id.webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.loadUrl("file:///android_asset/index.htm"); 
} 

ответ

21

@ Ответ и комментарий графа указывали мне в правильном направлении.

Сначала убедитесь, что все размеры шрифта соответствуют размеру шрифта по умолчанию. Если вы используете абсолютные значения, следующие элементы не будут работать.

Тогда:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    mWebView = (WebView) findViewById(R.id.webview); 
    fontSize = mWebView.getSettings().getDefaultFontSize(); 
    ... 
} 

private void fontSizePlus() { 
    fontSize++; 
    this.changeFontSize(fontSize); 
} 

private void fontSizeMinus() { 
    fontSize--; 
    this.changeFontSize(fontSize); 
} 

private void changeFontSize(int value) { 
    mWebView.getSettings().setDefaultFontSize(value); 
} 

Изменяя значение размера шрифта по умолчанию все относительные размеры шрифтов настраиваются соответственно. Это дает вам гораздо больший контроль, чем WebSettings.setTextSize (WebSettings.TextSize t).

+0

спасибо, он работает;) – anticafe

+0

здесь мой веб-класс - это класс адаптера, как использовать шрифты fontSizePlus и fontSizeMinus спасибо – NagarjunaReddy

+0

Большое спасибо за ваше решение :) Это действительно полезно. – Programmer

4

Я не знаю, что webkitTextSizeAdjust поддерживается ничем, кроме сафари/мобильного сафари ,

Попробуйте WebSettings.setTextSize (WebSettings.TextSize t)

вместо того, чтобы сделать это с помощью JavaScript.

+0

Это, кажется, проблема, да. К сожалению, WebSettings.TextSize имеет только 5 возможных значений, которые я считаю слишком ограничивающими. Это лучшее, что WebView предлагает для этой проблемы? – hpique

+1

Ну, всегда есть простой старый css. То есть отрегулируйте fontSize на элементе body или тому подобное. – rob

+0

+1 Ваш комментарий указал мне в правильном направлении. В ближайшее время опубликует решение. – hpique

0

Брайан Кули помог мне с этим ... попробовать ...

increaseFontButton.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     WebSettings settings = myWebView.getSettings(); 
     settings.setTextZoom((int)(settings.getTextZoom() * 1.1)); 
    } 
} 
Смежные вопросы