2011-07-20 11 views
1

私のアプリはウェブサイトのページの内容を表示するWebViewをインスタンス化する必要があります。私のWebViewはタブの画面を埋めるわけではありませんが、携帯電話の画面には鉛を入れません。

それは携帯電話(私はあまりにも様々なHTCのと最近のサムスンで試してみた)と完璧に動作しますが、それはタブレット(ギャラクシータブ、またはASUSのEeeパッドトランスフォーマー)とされていません。代わりに充填画面WebViewが非常に小さく表示されます。

タブに応じて、ビューポートのおよそ25%から50%は塗りつぶされ、残りは空白になります。あたかもFILL_PARENTの代わりにWRAP_CONTENTを使用しているかのように見えます。

レイアウト私はこのようなルックスを使用しています:このレイアウトを使用して活動の

<?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パッドトランスフォーマーで同じですが、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

これは設定の問題でなければなりません。

私は失敗したSO FAR試してみましたWHAT:LayoutParamsを強制

私が最初にそれが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()

は私もthis discussionを見て、その後、webview.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);を試してみましたが、しかし、ないか、成功を持つ:それはちょうど何も変わりません。

<?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> 

あなたはいずれかを持っていますか:私は(下記参照)あなたのフィードバックに、さらに次のようにLayoutを変更しようとしたが、それは何も変更しないのLinearLayout

を使用して

  • アイディア? ありがとうございます!

答えて

3

私の推測では、それはタブレット用の互換モードで実行されていることであるがあり、両方のLinearLayoutであなたのWebViewを入れて作ってみます。マニフェストファイルを確認してください。あなたはあなたが見ているもののスクリーンショットを投稿できますか?

私の疑惑は正しいです。互換モードで動作しています。

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

ちょうどあなたのマニフェストで<application>タグの前に、<manifest>要素内のコードのこの部分を入れてください。

+0

ありがとうKumar。私はマニフェストファイルとスクリーンショットのセットを含めるために投稿を編集しました。 – Shlublu

+1

はい、うまくいきました!私はちょうどAPI 3からAPI 7(それは受け入れられる)に切り替える必要があり、アンドロイドを削除する必要がありました:xlargeScreensはAPI 9で導入されました。 – Shlublu

0

は、高さがのLinearLayoutの属性とWebViewのはandroid:layout_height="match_parent"

+0

申し訳ありませんが、私はそれを言っているはずです:LinearLayoutも試してみましたが、成功しませんでした。私は互換性の理由からfill_parentに固執する必要があります。 match_parentが最近のものです。 – Shlublu

0

webViewの新しいインスタンスを作成し、KEYは、webviewをコンテンツビューに設定することです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); 
     } 

    } 
関連する問題