Как открыть веб-просмотр во всплывающем окне в Android?

Я хочу добавить веб-представление в PopupWindow в моем приложении для Android. Это работает только для диалогового окна с предупреждениями. И это мой код:

 AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
            alert.setTitle("Google");
            WebView wv = new WebView(MainActivity.this);
            wv.loadUrl("http:\\www.google.com");
            wv.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);

                    return true;
                }
            });

            alert.setView(wv);
            alert.setNegativeButton("Close", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                }
            });
            alert.show();
        }

Но я хочу сделать это во всплывающем окне.


person Silvi Gupta    schedule 08.02.2017    source источник
comment
Расскажите нам, что вы пробовали и с какой проблемой столкнулись   -  person Mustansir    schedule 08.02.2017
comment
что вы пробовали до сих пор?   -  person IntelliJ Amiya    schedule 08.02.2017
comment
См. Мой код выше. Я хочу открыть URL-адрес в веб-просмотре либо в диалоговом окне предупреждения, либо во всплывающем окне, но пока я не могу этого сделать. Я новичок. Пожалуйста, направляйте.   -  person Silvi Gupta    schedule 08.02.2017
comment
@SilviGupta Вы можете настроить свое всплывающее окно и раздуть макет, который будет включать ваш веб-просмотр   -  person Piyush    schedule 08.02.2017
comment
Возможно, вам потребуется написать собственный WebChromeClient ..   -  person sunil sunny    schedule 08.02.2017


Ответы (4)


textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
            LayoutInflater inflater = MainActivity.this.getLayoutInflater();
            final View dialogView = inflater.inflate(R.layout.main, null);
            WebView wv = (WebView) dialogView.findViewById(R.id.web);
            wv.loadUrl("https://www.google.com");
            wv.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);

                    return true;
                }
            });

            dialogBuilder.setView(dialogView);
            Dialog markerPopUpDialog = dialogBuilder.create();
            markerPopUpDialog.show();
        }
    });

и это layout.main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
    android:id="@+id/web"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</WebView>

person Hasan shaikh    schedule 08.02.2017
comment
Спасибо, но я не этого хочу. Я хочу напрямую перенаправить на URL-адрес без этого небольшого окна, которое появляется до загрузки URL-адреса. - person Silvi Gupta; 08.02.2017
comment
@SilviGupta Ваш код правильный. Так в чем же проблема? - person Piyush; 08.02.2017
comment
Я получаю заголовок и кнопку закрытия в диалоговом окне, но не могу загрузить URL-адрес. - person Silvi Gupta; 08.02.2017
comment
@SilviGupta У меня твоя проблема. Когда вы загружаете свой URL-адрес, он показывает только кнопку закрытия и текст Google, а после загрузки URL-адреса он отображается в полноэкранном режиме. Это? - person Piyush; 08.02.2017
comment
Точно, но каково решение? Могу ли я добавить к нему индикатор выполнения - person Silvi Gupta; 08.02.2017

вы можете сделать это также с помощью Activity. сначала вам нужно выполнить действие с веб-представлением и установить ширину и высоту макета в файле java с помощью кода ниже ....

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);

    int width = dm.widthPixels;
    int height = dm.heightPixels;

    getWindow().setLayout((int) (width*0.9),(int)(height*0.8));

и в файле манифеста Android выберите тему «@ style / AppTheme.CustomThemeForWebViewPOPUp» для этого действия и в файле стиля поместите этот код ....

<style name="AppTheme.CustomThemeForWebViewPOPUp">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowCloseOnTouchOutside">true</item>
    <item name="android:windowBackground">@drawable/popup_activity_design</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>
person Arpit Prajapati    schedule 08.02.2017

В соответствии с вашими требованиями вы должны настроить диалоговое окно предупреждений с настраиваемым представлением.

Создайте один XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true">
    </WebView>

    <ProgressBar
        android:id="@+id/prg"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_centerInParent="true" />

</RelativeLayout>

<Button
    android:id="@+id/button3"
    style="@android:style/Widget.Holo.Button.Borderless"
    android:layout_width="wrap_content"
    android:textColor="#000000"
    android:layout_height="wrap_content"
    android:layout_gravity="center|right"
    android:text="Close" />

</LinearLayout>

Теперь реализуем код в java-файле:

 final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
    alert.setTitle("Google");
    View view = getLayoutInflater().inflate(R.layout.file_name, null);
    alert.setView(view);

    WebView wv = (WebView) view.findViewById(R.id.webview);
    pb = (ProgressBar) view.findViewById(R.id.prg);
    Button btnClose = (Button) view.findViewById(R.id.button3);
    pb.setVisibility(View.VISIBLE);

    btnClose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            alertDialog.dismiss();
        }
    });
    wv.setWebViewClient(new MyWebViewClient());
    wv.loadUrl("http://www.google.com");

    alertDialog = alert.create();
    alertDialog.show();
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.copyFrom(alertDialog.getWindow().getAttributes());
    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
    lp.height = WindowManager.LayoutParams.MATCH_PARENT;
    alertDialog.getWindow().setAttributes(lp);

Также сделайте заказ WebViewClient

class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);

        if (pb.getVisibility() == View.GONE) {
            pb.setVisibility(View.VISIBLE);
        }

        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        System.out.println("on finish");
        if (pb.getVisibility() == View.VISIBLE) {
            pb.setVisibility(View.GONE);
        }
    }
}

Примечание. Объявите объект alertDialog как глобальный.

person Piyush    schedule 08.02.2017

Наконец-то я это сделал. Вот мой код, если кому-то это нужно.

            AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
            alert.setTitle("Terms and conditions");
            View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.layout_termsdialog,null);
            WebView wv = (WebView) view.findViewById(R.id.web);
            progressbarterms= (ProgressBar) view.findViewById(R.id.progressbarterms);
            wv.loadUrl("my url");
            WebSettings webSettings = wv.getSettings();
            webSettings.setJavaScriptEnabled(true);
            wv.setWebViewClient(new TermsClient());
            alert.setView(view);
            alert.setNegativeButton("Close", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                }
            });
            alert.show();
        }
class TermsClient extends WebViewClient
{
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
                    progressbarterms.setVisibility(View.VISIBLE);
        view.loadUrl(url);
        return true;

    }

    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);

                    progressbarterms.setVisibility(View.GONE);
    }
}

И файл макета содержит веб-просмотр и индикатор выполнения.

person Silvi Gupta    schedule 08.02.2017
comment
Я отправил ответ с помощью индикатора выполнения. Это тоже было правильно. Вы могли бы использовать это! - person Piyush; 08.02.2017