crosswalk使用--AlertDialog.Builder彈窗--返回鍵彈窗、prompt彈窗

1.遺留問題:彈出窗口關閉後整個屏幕亮度很是高,一段時間後纔會恢復。html

2.遇到的問題:使用 import android.support.v7.app.AlertDialog 彈窗就閃退。java

 

返回鍵
經過重寫dispatchKeyEvent函數修改返回鍵事件

 

package com.example.lyj.crosswalk;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;

import org.xwalk.core.XWalkView;

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AndroidBug5497Workaround.assistActivity(this);

        XWalkView xWalkView = findViewById(R.id.web);
        xWalkView.loadUrl("file:///android_asset/index.html");
    }
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK 
                && 0 == event.getRepeatCount() 
                && event.getAction() == KeyEvent.ACTION_DOWN){
            new AlertDialog.Builder(MainActivity.this)
                    .setTitle("退出肯定")
                    .setMessage("是否肯定退出?")
                    .setPositiveButton("肯定退出", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            finish();
                        }
                    })
                    .setNegativeButton("取消退出", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                        }
                    })
                    .create()
                    .show();
            return false;
        }
        return super.dispatchKeyEvent(event);
    }
}

  

 
prompt監聽
 重寫onJsPrompt函數,自定義彈出窗口樣式和內容
        xWalkView.setUIClient(new XWalkUIClient(xWalkView){
            @Override
            public boolean onJsPrompt(XWalkView view, String url, String message, final String defaultValue, final XWalkJavascriptResult result) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                final EditText editText = new EditText(MainActivity.this);
                Uri uri = Uri.parse(message);
                editText.setText(defaultValue);
                if(uri.getAuthority().equals("serverAddr")) {
                    builder.setTitle("請輸入服務器地址").setView(editText);
                } else if(uri.getAuthority().equals("operator")) {
                    builder.setTitle("請輸入運營商信息").setView(editText);
                } else {
                    builder.setTitle("error");
                }
                builder.setPositiveButton("輸入確認", new DialogInterface.OnClickListener() {
                    @Override   //確認鍵處理
                    public void onClick(DialogInterface dialogInterface, int i) {
                        result.confirmWithResult(editText.getText().toString());
                    }
                });
                builder.setNegativeButton("取消輸入", new DialogInterface.OnClickListener() {
                    @Override   //取消鍵處理
                    public void onClick(DialogInterface dialogInterface, int i) {
                        result.confirmWithResult(defaultValue);
                    }
                });
                builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
                    @Override   //返回鍵處理
                    public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) {
                        if(KeyEvent.KEYCODE_BACK == i)
                            return true;    //返回鍵攔截
                        return false;       //其餘鍵直接返回
                    }
                });
                builder.show();
                return true;
            }
        });
相關文章
相關標籤/搜索