2014-03-01 111 views
1

我很興奮開發android應用程序和即時通訊製作一個基本的web瀏覽器。到目前爲止,我已經或多或少地處理了我想要的方式。我遇到的問題是一些網站加載全屏,並掩蓋了我的按鈕和editText的URL。例如像reddit.com或notcot.org這樣的網站在給定區域顯示webview,但像facebook.com或yahoo.com這樣的網站將重新加載並佔據整個屏幕,覆蓋我的按鈕和editText欄,讓我使用模擬器返回按鈕,而不是我所做的。我真的不知道是什麼問題,因爲它似乎只發生在一些網站而不是其他網站。 這裏是XML:android webview佔用整個屏幕

<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); 

    } 

} 

} 

感謝您的任何即時通訊只是沒有看到任何提示或建議。

回答

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()); 

所有這一切都會讓你打開網頁視圖中的鏈接,你將永遠看到你的按鈕。

+0

謝謝!一切正常,現在我需要! –

+0

是的,就是這樣,在WebView中有很多不同的有用設置,你最好還是要讀取API – bgplaya

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:你可以用線性佈局這一性質也一樣,如果他們是從一個相對佈局的孩子。

sry關於我的語法,英語不是我的主要語言= [。