Chcę określić szerokość i wysokość WebView
. Próbowałem już go za pomocą:Jak uzyskać szerokość i wysokość widoku Web w Androidzie
webView.getWidth();
webView.getHeight();
ale powstały log zawsze pokazuje je do 0.
Chcę określić szerokość i wysokość WebView
. Próbowałem już go za pomocą:Jak uzyskać szerokość i wysokość widoku Web w Androidzie
webView.getWidth();
webView.getHeight();
ale powstały log zawsze pokazuje je do 0.
Hmmm - Spojrzałem przez źródło WevView i widzę, że są one za pomocą wewnętrznie View # getWidth i View # getHeight oto jedna z metod prywatnych zainteresowany WebView
„s:
/*
* Return the width of the view where the content of WebView should render
* to.
*/
private int getViewWidth() {
if (!isVerticalScrollBarEnabled() || mOverlayVerticalScrollbar) {
return getWidth();
} else {
return getWidth() - getVerticalScrollbarWidth();
}
}
Jak zauważył w komentarzach trzeba upewnić się, że są to pomiar po przypisaniu układ aktywność np setContentView(R.layout.mylayout);
Prawdopodobnie prawdopodobnie sprawdzałeś rozmiary zbyt wcześnie, najprawdopodobniej w onCreate
. Zamiast tego, spróbuj tego:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView webView, String url) {
super.onPageFinished(webView, url);
Log.i(TAG, findViewById(R.id.my_component).getWidth(););
}
});
Ta metoda nie działa, wysokość jest zawsze równa 0. – Chan
onPageFinished
oddzwonienie podejście nie działa podczas korzystania loadData
lub loadDataWithBaseURL
. Widziałem inne rozwiązanie na Andromedev przy użyciu JavaScript, ale nie jestem przekonany, że jest to najlepsza ścieżka do wykonania.
Jeśli chcesz uzyskać czas ładowania w Wysokości i szerokości, nie możesz go uzyskać, ponieważ czas ładowania nie może go uzyskać. Proponuję użyć Webview Touchevent i uzyskać wysokość i szerokość. W przeciwnym razie użyj innego zdarzenia kliknięcia widoku i uzyskaj wysokość i szerokość.
webView.getWidth();
webView.getHeight();
Użyj tego.
za wcześnie sprawdzasz rozmiar strony internetowej. można spróbować to w następujący sposób
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
webView.getWidth();
webView.getHeight();
}
Dla każdego, kto jeszcze walczy. Skorzystaj z tych metod, aby uzyskać wysokość i szerokość swojej przeglądarki internetowej.
computeHorizontalScrollRange(); -> for width
computeVerticalScrollRange(); -> for height
Zwróć uwagę, że mogą one zwracać różne wartości do getWidth() i getHeight(), ponieważ zwracają całą przewijalną szerokość/wysokość, a nie faktyczną szerokość/wysokość widoku internetowego na ekranie . – aaronmarino
Należy również pamiętać, że te metody są chronione i na przykład trudno jest z nich korzystać w niestandardowym układzie. –
Oto bardziej eleganckie rozwiązanie
public void onCreate(Bundle savedInstanceState) {
webView = (WebView) findViewById(R.id.webView1);
webView.addOnLayoutChangeListener(new OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right,int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
int w= webView.getWidth();
int h= webView.getHeight();
}
});
}
miałem ten sam problem. Właśnie wprowadziłem metodę initWebView w onWindowFocusChangedt.
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
initWebView();
}
private void initWebView(){
if(isOnline()){
venueWebView = (WebView) findViewById(R.id.venueWebView);
String url = "some url";
int viewWight = venueWebView.getWidth();
int viewHeight = venueWebView.getHeight();
venueWebView.loadUrl(url);
}
Mam nadzieję, że moja odpowiedź pomoże komuś.
Jeśli chcesz uzyskać wysokość webview
po załadowaniu zawartości, może to być pomocne.
ViewTreeObserver viewTreeObserver = mWebView.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
int height = mWebView.getMeasuredHeight();
if(height != 0){
Toast.makeText(getActivity(),"height:"+height,Toast.LENGTH_SHORT).show();
mWebView.getViewTreeObserver().removeOnPreDrawListener(this);
}
return false;
}
});
Potrzebna jest szerokość i wysokość zawartości WebView CONTENTS po załadowaniu kodu HTML. TAK, ale nie ma metody getContentWidth (tylko wartość portu widoku), I getContentHeight() jest niedokładne!
Odpowiedź: podklasa WebView:
/*
Jon Goodwin
*/
package com.example.html2pdf;//your package
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
class CustomWebView extends WebView
{
public int rawContentWidth = 0; //unneeded
public int rawContentHeight = 0; //unneeded
Context mContext = null; //unneeded
public CustomWebView(Context context) //unused constructor
{
super(context);
mContext = this.getContext();
}
public CustomWebView(Context context, AttributeSet attrs) //inflate constructor
{
super(context,attrs);
mContext = context;
}
public int getContentWidth()
{
int ret = super.computeHorizontalScrollRange();//working after load of page
rawContentWidth = ret;
return ret;
}
public int getContentHeight()
{
int ret = super.computeVerticalScrollRange(); //working after load of page
rawContentHeight = ret;
return ret;
}
//=========
}//class
//=========
można pisać kod? Pamiętaj, że nie można uzyskać szerokości i wysokości widoku w metodzie OnCreate, ponieważ układ nie został jeszcze wprowadzony. – Whaledawg
Umieścić mój kod jest tutaj height = mainWebView.getHeight(); System.err.println ("Wyświetl całkowitą wysokość ->" + mainWebView.getHeight()); System.err.println ("Measure Height ->" + mainWebView.getMeasuredHeight()); –