Я столкнулся с этой же проблемой, когда использовал WebView для отображения статической карты Google. Я хотел центрировать WebView в центре карты Google. Вот мое решение:
Я расширил WebView, чтобы иметь доступ к его методам computeHor horizontalScrollRange () и computeVerticalScrollRange (). Обратите внимание на функцию centerMap ():
public class WebMapView extends WebView {
public WebMapView(Context context) {
super(context);
}
public WebMapView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public WebMapView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void centerMap(){
int scrollX = (computeHorizontalScrollRange() - getWidth()) / 2;
int scrollY = (computeVerticalScrollRange() - getHeight()) / 2;
scrollTo(scrollX, scrollY);
}
}
В onCreate моей деятельности я настраиваю WebMapView после того, как установлен глобальный макет (таким образом, ширина и высота WebMapView установлены). И я вызываю centerMap () в событии onNewPicture, чтобы он учитывал метод scrollTo ():
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.vendor_info);
mWebMap = (WebMapView) findViewById(R.id.webMap);
mWebMap.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mWebMap.getViewTreeObserver().removeGlobalOnLayoutListener(this);
setupWebMapView();
}
});
}
private void setupWebMapView(){
final String latitude = String.valueOf(mData.venues.get(0).lat);
final String longitude = String.valueOf(mData.venues.get(0).lon);
String centerUrl = String.format(WEBMAP_URL, latitude, longitude, WEBMAP_ZOOM, sVenueImageWidth, sVenueImageHeight, latitude, longitude, lat, lon);
mWebMap.getSettings().setJavaScriptEnabled(true);
mWebMap.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
mWebMap.setWebViewClient(new WebViewClient());
mWebMap.loadUrl(centerUrl);
mWebMap.setPictureListener(new PictureListener() {
@Override
public void onNewPicture(WebView view, Picture picture) {
mWebMap.centerMap();
}
});
}
Отлично работает для меня на всех размерах экрана. Надеюсь, это поможет!