2010-11-15 18 views
5

Jak dostosować rozmiar czcionki Androida WebView? Poniższa wydaje się mieć żadnego wpływu:Dostosuj rozmiar czcionki Androida 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 + " })()"); 
} 

Jeżeli WebView i stałe zostały zainicjowane w następujący sposób:

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"); 
} 

Odpowiedz

21

@ Odpowiedź i komentarz Rob'a wskazał mi właściwy kierunek.

Najpierw upewnij się, że wszystkie rozmiary czcionek są względne w stosunku do domyślnego rozmiaru czcionki. Jeśli użyjesz wartości bezwzględnych, poniższe elementy nie będą działać na tych elementach.

Następnie:

@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); 
} 

Zmieniając wartość domyślny rozmiar czcionki wszystkie względne rozmiary czcionek są odpowiednio dostosowane. Daje to o wiele większą kontrolę niż WebSettings.setTextSize (WebSettings.TextSize t).

+0

dziękuję, działa;) – anticafe

+0

tutaj mój webview jest klasy adaptera, jak używać 'fontSizePlus' i' fontSizeMinus' dziękuję – NagarjunaReddy

+0

Bardzo dziękuję za rozwiązanie :) jest naprawdę przydatne. – Programmer

4

nie wiem, że webkitTextSizeAdjust jest obsługiwana w coś innego niż safari/Mobile Safari .

Spróbuj WebSettings.setTextSize (WebSettings.TextSize t)

zamiast próbować zrobić z javascript.

+0

To wydaje się być problemem, tak. Niestety WebSettings.TextSize ma tylko 5 możliwych wartości, które uważam za zbyt ograniczone. Czy to najlepsze, co oferuje WebView dla tego problemu? – hpique

+1

Cóż, zawsze jest zwykły stary css. Oznacza to, że dostosuj fontSize na elemencie body lub podobnym. – rob

+0

+1 Twój komentarz wskazał mi właściwy kierunek. Wkrótce opublikuje rozwiązanie. – hpique

0

Brian Cooley pomógł mi z tym ... spróbować ...

increaseFontButton.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     WebSettings settings = myWebView.getSettings(); 
     settings.setTextZoom((int)(settings.getTextZoom() * 1.1)); 
    } 
}