我非常擅长开发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);
}
}
}
感谢任何关于我没有看到的提示或建议。
答案 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:如果它们是来自相对布局的子项,也可以将此属性与线性布局一起使用。
关于我的语法,英语不是我的主要语言= [。