Моему приложению необходимо создать экземпляр WebView
, который отображает содержимое страницы веб-сайта.
Он отлично работает с мобильными телефонами (я пробовал с различными HTC и снедавний Samsung тоже) , но не с планшетами (Galaxy Tab или Asus Eee Pad Transformer): вместо заполнения экрана WebView
выглядит очень маленьким.
В зависимости от вкладок заполнено примерно от 25% до 50% области просмотра, остальное остается пустым.Это выглядит так, как если бы я использовал WRAP_CONTENT
вместо FILL_PARENT
.
Используемый мной макет выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
onCreate()
действиякоторый использует этот макет выглядит следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.showdoc); // showdoc is the layout above
// Configuration of the WebView
final WebView webview = (WebView) findViewById(R.id.webview);
final WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
// Callbacks setup
final Context ctx = this;
webview.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(ctx, getResources().getString(R.string.error_web) + description, Toast.LENGTH_LONG).show();
}
});
// Display of the page
webview.loadUrl(getResources().getString(R.string.doc_url) + Locale.getDefault().toString());
}
И файл манифеста выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET" />
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:debuggable="true">
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
Когда я получаю доступ к тому же URL с помощью обычного браузера, страница работает правильнозаполните экран.
Приведенный ниже снимок экрана был сделан с использованием эмулятора Samsung Galaxy Tab 10 дюймов, но на физическом Eee Pad Transformer результат практически такой же: WebView
на 50% меньше.На мобильном телефоне нет проблем, WebView
занимает все доступное пространство.
Мое приложение, в альбомном режиме:
Мое приложение, в портретном режиме:
Тот же URL, то же оборудование, с браузером по умолчанию, в альбомном режиме:
Тот же URL, то же оборудование, с браузером по умолчанию, в портретном режиме:
Так что, должно быть, дело в настройках.
ЧТО Я НЕПРАВИЛЬНО ПРОБОВАЛ ТАК ДАЛЬШЕ:
- Форсирование параметров макета
Сначала я думал, что это проблема LayoutParams
, поэтому я попытался добавить то, что следует к моему onCreate()
, но безуспешно.Это просто ничего не меняет:
// Zoom out
final Display display = getWindowManager().getDefaultDisplay();
final int width = display.getWidth();
final int height = display.getHeight();
webview.setLayoutParams(new LayoutParams(width, height));
Я также посмотрел это обсуждение , а затем попытался webview.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);
, но безуспешно.
- Использование LinearLayout
Я попытался изменить Layout
следующим образом в соответствии с вашими отзывами (см. ниже), но это не такничего не менять:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
Есть идеи?Заранее спасибо!