WebView на MainActivity для обработки Intent
Добавлено: 22 июн 2015, 07:14
Добрый день. Мне очень понравился урок 32, где описывается создание простого браузера. Мне захотелось сделать все тоже самое, только WebView расположить в MainActivity внутри отдельного Layout.
Т.е. получается внутри основного LinearLayout находит еще один горизонтальный LinearLayout, который содержит слева-направо EditText, куда будет писаться URL и Button, по нажатию которого будет стартовать WebView, ниже располагается еще один LinearLayout, внутри которого находится сама WebView с параметрами "fill_parent" по ширине и высоте. Таким образом получается визуально похоже на обычный браузер. Однако я не смог придумать как реализовать эту прихоть, пытался читать на developer.android.com, но, видимо, английского не хватает. Подскажите пожалуйста как это можно реализовать, буду очень благодарен.
P.S. Также была мысль сделать еще одну кнопку "Back" для возврата на предыдущую страницу, но опять же не знаю как это реализовать.
Вот такой xml для MainActivity у меня заготовлен:
UPD!
Вычитал, что нужно сначала прописать в public class MainActivity дописать: WebView mWebView;
А вот так я пытаюсь запустить URL: mWebView.loadUrl("https://www.google.com/");
Код из MainActivity.java
UPD2! Пробовал запускать на двух эмуляторах. Один без Google API's - запустил приложение, в webview сообщил, что не смог открыть URL, что уже хорошо (тем, что показал это в webview, а не в браузере), а другой эмулятор с Google API's сразу редиректнул в браузер без вопросов. В manifests, к слову, никаких intent-filter я не прописывал, потому что напрямую говорю WebView открывать url. Доступ в инет разрешил.
UPD3! Заработало со следующим кодом:
Однако не отрабатывает если url воодится не полный, например: google.com. Не все url открываются в моем приложении, несмотря на то, что я явно указал это в shouldOverrideUrlLoading. Не подскажете в чем могут крыться эти проблемы ?
Т.е. получается внутри основного LinearLayout находит еще один горизонтальный LinearLayout, который содержит слева-направо EditText, куда будет писаться URL и Button, по нажатию которого будет стартовать WebView, ниже располагается еще один LinearLayout, внутри которого находится сама WebView с параметрами "fill_parent" по ширине и высоте. Таким образом получается визуально похоже на обычный браузер. Однако я не смог придумать как реализовать эту прихоть, пытался читать на developer.android.com, но, видимо, английского не хватает. Подскажите пожалуйста как это можно реализовать, буду очень благодарен.
P.S. Также была мысль сделать еще одну кнопку "Back" для возврата на предыдущую страницу, но опять же не знаю как это реализовать.
Вот такой xml для MainActivity у меня заготовлен:
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="<-"
android:id="@+id/btnBack">
</Button>
<EditText
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1"
android:id="@+id/etURL"
android:fadeScrollbars="true">
</EditText>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go"
android:id="@+id/btnGo">
</Button>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/llMain"
android:orientation="vertical">
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
</LinearLayout>
Вычитал, что нужно сначала прописать в public class MainActivity дописать: WebView mWebView;
А вот так я пытаюсь запустить URL: mWebView.loadUrl("https://www.google.com/");
Код из MainActivity.java
Код: Выделить всё
public class MainActivity extends Activity{
private WebView mWebView;
Button btnGo;
Button btnBack;
EditText etURL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnGo = (Button) findViewById(R.id.btnGo);
btnBack = (Button) findViewById(R.id.btnBack);
etURL = (EditText) findViewById(R.id.etURL);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.loadUrl("https://www.google.com/");
}
}
UPD3! Заработало со следующим кодом:
Код: Выделить всё
public class MainActivity extends Activity {
private WebView mWebView;
Button btnGo;
Button btnBack;
EditText etURL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnGo = (Button) findViewById(R.id.btnGo);
btnBack = (Button) findViewById(R.id.btnBack);
etURL = (EditText) findViewById(R.id.etURL);
btnGo.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
String url = etURL.getText().toString();
mWebView.loadUrl(url);
}
}
);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new MyWebViewClient());
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}
}