2012-05-02 4 views
2

В моем текущем проекте мне нужны мои пользователи, чтобы иметь возможность прокручивать и увеличивать масштаб изображения на больших SVG изображений. Одна из основных проблем, с которыми я столкнулся, - это ограничение, которое класс android WebView увеличивает и уменьшает масштаб. Есть ли способ удалить или изменить эти ограничения по своему усмотрению? Стандартные средства управления увеличением не поддерживают освобождение этих границ.Масштабирование ввода/вывода на веб-обозревателе Android без установленного ограничения

Если мой вопрос неясен или мне нужно подробно остановиться на моем вопросе, не стесняйтесь спрашивать.

здоровается, Wottah

+0

Вам нужно это для работы в целом или по конкретному вкусу Android? Я спрашиваю, потому что реализация масштабирования «WebView» была изменена совсем немного по разным выпускам. Вы должны иметь возможность использовать отражение, чтобы обойти это «ограничение», но лучше подготовиться к целому ряду различных случаев, если вы хотите, чтобы он работал с различными версиями устройств/ОС. –

+0

Ну, мне нужно, чтобы он работал на ICS (4.0.3). и предпочтительно на планшетных устройствах и смартфонах. В настоящее время я тестирую свое приложение на планшете Transcend Asus EEE. Но я хотел бы, чтобы мое приложение работало на таких устройствах, как Samsung Galaxy SII. нет ли единого решения, которое работает для всех устройств Android? – Wottah

ответ

3

Поскольку никто не кажется, придумали другое решение, чем с помощью отражения - я не знаю ни одной альтернативы на данный момент - я написал быстрый фрагмент кода, который показывает, как чтобы обходить верхний предел действия масштабирования.

Обратите внимание, что приведенный ниже код будет работать только на ICS и, возможно, на сотах, но в настоящее время у меня нет планшета, который должен осмотреть, если внутренняя работа основывается на том же классе ZoomManager. Gingerbread, Froyo и Eclair, похоже, реализуют функцию масштабирования более или менее непосредственно в классе WebView. В приведенном ниже примере должно быть довольно просто добавить некоторый код, чтобы также учитывать эти операционные системы.

// just set an Activity's content view to a single WebView for this test 
WebView mWebview = new WebView(this); 
setContentView(mWebview); 

// retrieve the ZoomManager from the WebView 
Class<?> webViewClass = mWebview.getClass(); 
Field mZoomManagerField = webViewClass.getDeclaredField("mZoomManager"); 
mZoomManagerField.setAccessible(true); 
Object mZoomManagerInstance = mZoomManagerField.get(mWebview); 

// modify the "default max zoom scale" value, which controls the upper limit 
// and set it to something very large; e.g. Float.MAX_VALUE 
Class<?> zoomManagerClass = Class.forName("android.webkit.ZoomManager"); 
Field mDefaultMaxZoomScaleField = zoomManagerClass.getDeclaredField("mDefaultMaxZoomScale"); 
mDefaultMaxZoomScaleField.setAccessible(true); 
mDefaultMaxZoomScaleField.set(mZoomManagerInstance, Float.MAX_VALUE); 
+0

это именно то, что мне нужно! Благодаря!! Вам просто удалось исправить одну из основных проблем моего проекта стажировки ^^. Мне не нужно, чтобы мое приложение работало на версиях ниже ICS, так как некоторые ключевые функции моего приложения реализованы только в версии 4.0. Я много размышлял над этой проблемой. Могу ли я спросить, как вы получили информацию, необходимую для редактирования класса веб-просмотра, как это? (это мой первый проект для Android, и я действительно в него вникаю) – Wottah

+0

Пришлите мне копию своего окончательного отчета, и мы это называем. ;) С точки зрения того, где/как я нашел информацию для этого подхода, я настоятельно рекомендую [grepcode] (http://grepcode.com/), когда дело касается источников Android. Я просто просмотрел внутреннюю работу «WebView», которая затем привела меня к «ZoomManager». Последний ключевой ингредиент имеет дескриптивные имена переменных, к которым, к счастью, относится Android. Когда у вас есть эти данные, реализация фактического отражения относительно проста, как вы можете видеть выше. –

+0

Я вижу, это помогает превратить все это в контекст. насколько отчет идет: он будет на голландском, поэтому я увижу, что я могу сделать xD. – Wottah