Google Charts с Android Webview - PullRequest
       7

Google Charts с Android Webview

2 голосов
/ 04 марта 2011

Я пытаюсь сделать типичную вещь, когда вы загружаете данные в строку URL, вызываете API диаграммы Google со всей этой датой, а затем загружаете ее в веб-просмотр.

Вопрос: есть ли у кого-то прямой «правильный» способ сделать это?

Я возился с этим всю ночь.

Вот главная проблема:

Для веб-просмотра установлено значение Fill_Parent. Это означает, что я не знаю точную ширину и высоту. Поскольку API Google требует, чтобы вы указали ширину и высоту, как именно я могу получить ширину и высоту веб-просмотров, чтобы я мог отправить их? Я пробовал это решение:

final WebView web = (WebView)findViewById(R.id.webviewgraph);
    ViewTreeObserver tree = web.getViewTreeObserver();
    tree.addOnGlobalLayoutListener(new OnGlobalLayoutListener()
    {
        @Override
        public void onGlobalLayout() 
        {...code continues

И кажется, что все в порядке, но когда я вызываю web.getWidth (), web.getDrawingBounds () или web.getMeasuredWidth (), я всегда возвращаюсь БОЛЬШЕ, чем на самом деле держит экран. Сейчас я решаю эту проблему, вычитая постоянное смещение в 136 пикселей ... но, увы, это НЕ совместимо со всеми устройствами.

Кто-нибудь знает "правильный" способ использования API карт Google с плавным просмотром веб-страниц? Или, может быть, кто-то знает, как получить действительную правильную ширину и высоту вида?

Спасибо

UPDATE Я изменил свой код так, что теперь я использую пользовательский веб-просмотр, который переопределяет событие OnSizeChanged. Возвращаемая ширина и высота ... к сожалению, все те же ... просто слишком большие.

UPDATE Проанализировав ширину и высоту, я придумал следующее:

int w = (int)((float)width * .667f);
int h = (int)((float)height * .667f);

Пока это работает на устройствах, на которых я тестирую. Почему ширина и высота возвращаются на 1/3 БОЛЬШЕ, чем фактическая ширина? Понятия не имею.

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

У меня не было времени, чтобы дважды это проверить, но я считаю весьма вероятным, что ваш 0.667f связан с тем, что веб-просмотр масштабируется в соответствии с плотностью ваших устройств.

Согласноhttp://developer.android.com/guide/webapps/targeting.html#ViewportDensity "устройство высокой плотности показывает веб-страницу с масштабным коэффициентом по умолчанию, в 1,5 раза превышающим фактическое разрешение в пикселях, для соответствия целевой плотности"

Вам нужно найти целевую плотность использования и использовать ее в качестве шкалы:

final float scale = getResources().getDisplayMetrics().density;

// Your code:
int w = (int)(width / scale);
int h = (int)(height / scale);

Я не слишком хорошо читаю по этому вопросу, но я думаю, что вы можете предотвратить масштабирование, используя

<meta name="viewport" content="target-densitydpi=device-dpi" />

но не верьте мне на слово.Кроме того, я не уверен, с какого уровня API действителен видовой экран.

1 голос
/ 04 марта 2011

Можете ли вы попробовать использовать обратный вызов OnSizeChanged ()? , Они говорят, что он вызывается после рендеринга представления, поэтому он должен содержать информацию о фактическом размере, если WebView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...