Мой WebView не заполняет экраны вкладок (но заполняет экраны мобильных телефонов без pb) - PullRequest
1 голос
/ 20 июля 2011

Моему приложению необходимо создать экземпляр 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 занимает все доступное пространство.

Мое приложение, в альбомном режиме: My app, in landscape mode

Мое приложение, в портретном режиме: My app, in portrait mode

Тот же URL, то же оборудование, с браузером по умолчанию, в альбомном режиме: Same URL, same hardware, with the default browser, in landscape mode

Тот же URL, то же оборудование, с браузером по умолчанию, в портретном режиме: Same URL, same hardware, with the default browser, in portrait mode

Так что, должно быть, дело в настройках.

ЧТО Я НЕПРАВИЛЬНО ПРОБОВАЛ ТАК ДАЛЬШЕ:

  • Форсирование параметров макета

Сначала я думал, что это проблема 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));
  • setScrollBarStyle ()

Я также посмотрел это обсуждение , а затем попытался 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>

Есть идеи?Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

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

Мое подозрение было верным.Он работает в режиме совместимости.

<supports-screens android:largeScreens="true"
android:normalScreens="true" android:smallScreens="true"
android:anyDensity="true" android:xlargeScreens="false" />

Поместите этот фрагмент кода в элемент <manifest> непосредственно перед тегом <application> в манифесте.

0 голосов
/ 14 апреля 2013

создайте новый экземпляр webView, а KEY - для установки веб-просмотра на viewview setContentView(webView);, сработавшего для меня!надеюсь, это поможет.

public class DisplayWebPage extends Activity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_message);

    Intent intent = getIntent(); // Get the message from the intent
    String postString = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    String url = ("http://api.myDomain.com/sbmRank/app/1/CSS-Slider-Menu.php?action=" + postString);

    webView = new WebView(this);
    setContentView(webView);  //HERE IS THE KEY PART
    WebSettings webSettings = webView.getSettings();
    webSettings.setBuiltInZoomControls(true);

    webView.setWebViewClient(new Callback());
    webView.loadUrl(url);

}

   private class Callback extends WebViewClient{

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return (false);
        }

    }
0 голосов
/ 20 июля 2011

Попробуйте поместить ваше веб-представление в Linearlayout и сделать так, чтобы атрибуты высоты Linearlayout и веб-просмотра имели android:layout_height="match_parent"

...