WebView на MainActivity для обработки Intent

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
madcap
Сообщения: 1
Зарегистрирован: 22 июн 2015, 07:03

WebView на MainActivity для обработки Intent

Сообщение madcap » 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 у меня заготовлен:

Код: Выделить всё


<?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>

UPD!

Вычитал, что нужно сначала прописать в 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/");

    }

}
UPD2! Пробовал запускать на двух эмуляторах. Один без Google API's - запустил приложение, в webview сообщил, что не смог открыть URL, что уже хорошо (тем, что показал это в webview, а не в браузере), а другой эмулятор с Google API's сразу редиректнул в браузер без вопросов. В manifests, к слову, никаких intent-filter я не прописывал, потому что напрямую говорю WebView открывать url. Доступ в инет разрешил.

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;
        }
    }
}
Однако не отрабатывает если url воодится не полный, например: google.com. Не все url открываются в моем приложении, несмотря на то, что я явно указал это в shouldOverrideUrlLoading. Не подскажете в чем могут крыться эти проблемы ?

Ответить