android webview占据整个屏幕

时间:2014-03-01 22:04:42

标签: android webview

我非常擅长开发Android应用程序,而且我正在制作一个基本的Web浏览器。到目前为止,我已经或多或少地按照我想要的方式工作了。我遇到的问题是一些网站加载全屏并覆盖我的按钮和editText的URL。例如reddit.com或notcot.org等网站显示在webview的给定区域,但facebook.com或yahoo.com等网站将重新加载并占据整个屏幕,覆盖我的按钮和editText栏,让我使用模拟器返回按钮而不是我制作的按钮。我真的不确定问题是什么,因为它似乎只发生在一些网站而不是其他网站。 这是XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".ShowWeb" 
>

<LinearLayout
    android:id="@+id/linear1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
>
    <ImageButton
        android:id="@+id/backButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:background="@null"
        android:onClick="onClick"
        android:src="@drawable/leftarrow" 
    />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:layout_marginLeft="10dp"
        android:background="@color/white"
        android:hint="@string/hint"
        android:inputType="textUri" 
        android:isScrollContainer="true"
        android:maxWidth="225dp"
        android:scrollHorizontally="true"/>

   <ImageButton
        android:id="@+id/goButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
         android:layout_marginRight="5dp"
        android:background="@null"
        android:layout_gravity="center"
        android:onClick="onClick"
        android:src="@drawable/go" 
    />

    <ImageButton
        android:id="@+id/forwardButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:background="@null"
        android:onClick="onClick"
        android:src="@drawable/rightarrow" 
     />   

  </LinearLayout>

   <WebView
       android:id="@+id/webBrowser"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_below="@+id/linear1" 
   />

</RelativeLayout>

,Java代码是

import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.EditText;
import android.widget.ImageButton;

public class ShowWeb extends Activity implements OnClickListener 
{
ImageButton forward,back,go;
WebView wv;
String urlString;
EditText et;


@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_show_web);
    forward = (ImageButton)findViewById(R.id.forwardButton);
    forward.setOnClickListener(this);
    back = (ImageButton)findViewById(R.id.backButton);
    back.setOnClickListener(this);
    go = (ImageButton)findViewById(R.id.goButton);
    go.setOnClickListener(this);
    wv=(WebView)findViewById(R.id.webBrowser);
    wv.setInitialScale(50);
    wv.setVerticalScrollBarEnabled(true);
    wv.setHorizontalScrollBarEnabled(true);
    wv.loadUrl("http://www.google.com");
    et=(EditText)findViewById(R.id.editText1);
    et.setHorizontalScrollBarEnabled(true);
    et.setOnKeyListener(new View.OnKeyListener() 
    {
         public boolean onKey(View v, int keyCode, KeyEvent event) 
         {
         if((event.getAction()==KeyEvent.ACTION_DOWN)&& 
                 keyCode==KeyEvent.KEYCODE_ENTER)
         { 
             try
             {
               URL url = new URL(et.getText().toString());
               urlString=url.toString();
               wv.setInitialScale(50);
               wv.loadUrl(urlString);

             }
             catch(MalformedURLException e)
             {
                urlString = et.getText().toString(); 
                wv.setInitialScale(50);
                wv.loadData(urlString, "text/html", "UTF-8");


             }
             return true;
         }        
         else    
             return false;
         }
    }
    );
    wv.getSettings().setJavaScriptEnabled(true);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.show_web, menu);
    return true;
}


@Override
public void onClick(View v) 
{
    switch(v.getId()) 
    {
        case R.id.forwardButton:
            if(wv.canGoForward())
                wv.goForward();
                et.setText(wv.getUrl());
            break;
        case R.id.backButton:
            if(wv.canGoBack())
                wv.goBack();
                et.setText(wv.getUrl());

            break;
            case R.id.goButton:
            wv.setInitialScale(50);
            wv.loadUrl(urlString);

    }

}

}

感谢任何关于我没有看到的提示或建议。

2 个答案:

答案 0 :(得分:5)

您必须覆盖WebViewClient,如下面的代码所示:

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    {
        view.loadUrl(url);
        return true;
    }
}

然后在你的onCreate方法中:

wm.setWebViewClient(new HelloWebViewClient());

所有这些都可以让您在网页浏览中打开链接,并且您将始终看到您的按钮。

答案 1 :(得分:0)

为什么你不使用相对布局和他的礼仪? 你可以使用layout_below来解决这个问题。

EX:你有3个itens(按钮1,按钮2和WebView)

Button1 id is @+id/button1
Button2 id is @+id/button2
WebView id is @+id/webView

button1 layout_above = "@+id/webView"
button2 layout_right = "@id/button1"
webview layout_below = "@id/button1"

ps:如果它们是来自相对布局的子项,也可以将此属性与线性布局一起使用。

关于我的语法,英语不是我的主要语言= [。