我的应用需要实例化显示网站页面内容的WebView
。
它与手机完美配合(我已尝试使用各种HTC和最近的三星)但它不适用于平板电脑(Galaxy Tab或华硕) 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时,页面会正确填充屏幕。
下面的截图是使用三星Galaxy Tab 10 in。模拟器制作的,但结果在物理Eee Pad Transformer上基本相同,WebView
小50%。在手机上没问题,WebView
占用了所有可用空间。
我的应用,横向模式:
我的应用,以纵向模式:
相同的网址,相同的硬件,使用默认浏览器,处于横向模式:
相同的网址,相同的硬件,使用默认浏览器,处于纵向模式:
所以一定是设置问题。
我做了多少非常好的尝试:
我最初认为这是一个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));
我还查看了this discussion,然后尝试webview.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);
,但也没有成功。
我已尝试将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>
你知道吗?
提前谢谢!
答案 0 :(得分:3)
我的猜测是它在平板电脑的兼容模式下运行。检查清单文件。你能发布你所看到的截图吗?
我怀疑是对的。它以兼容模式运行。
<supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:anyDensity="true" android:xlargeScreens="false" />
将这段代码放在<manifest>
元素中,就在清单中的<application>
标记之前。
答案 1 :(得分:0)
尝试将您的网页视图放在Linearlayout中,并使Linearlayout和webview的高度属性都为android:layout_height="match_parent"
答案 2 :(得分:0)
创建webView的新实例, KEY 是将webview设置为为我工作的contentview 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);
}
}