package net.micode.notes.ui; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.ImageButton; import net.micode.notes.R; public class TableEditActivity extends Activity implements View.OnClickListener { private static final String TAG = "TableEditActivity"; public static final String EXTRA_TABLE_HTML = "table_html"; public static final String RESULT_TABLE_HTML = "result_table_html"; private WebView mWebView; private String mTableHtml; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.table_edit_activity); // 初始化视图 initViews(); // 获取传入的表格HTML Intent intent = getIntent(); if (intent.hasExtra(EXTRA_TABLE_HTML)) { mTableHtml = intent.getStringExtra(EXTRA_TABLE_HTML); } else { // 默认创建一个2x2的表格 mTableHtml = generateDefaultTable(2, 2); } // 初始化WebView initWebView(); } private void initViews() { // 标题栏按钮 ImageButton btnBack = findViewById(R.id.btn_back); ImageButton btnDone = findViewById(R.id.btn_done); btnBack.setOnClickListener(this); btnDone.setOnClickListener(this); // 表格操作按钮 Button btnAddRowAbove = findViewById(R.id.btn_add_row_above); Button btnAddRowBelow = findViewById(R.id.btn_add_row_below); Button btnDeleteRow = findViewById(R.id.btn_delete_row); Button btnAddColLeft = findViewById(R.id.btn_add_col_left); Button btnAddColRight = findViewById(R.id.btn_add_col_right); Button btnDeleteCol = findViewById(R.id.btn_delete_col); // 设置点击事件 btnAddRowAbove.setOnClickListener(this); btnAddRowBelow.setOnClickListener(this); btnDeleteRow.setOnClickListener(this); btnAddColLeft.setOnClickListener(this); btnAddColRight.setOnClickListener(this); btnDeleteCol.setOnClickListener(this); } private void initWebView() { mWebView = findViewById(R.id.web_view_table); // 配置WebView WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); webSettings.setDefaultTextEncodingName("utf-8"); // 设置WebViewClient mWebView.setWebViewClient(new WebViewClient()); // 添加JavaScript接口 mWebView.addJavascriptInterface(new TableEditInterface(), "Android"); // 加载表格编辑页面 loadTableEditor(); } private void loadTableEditor() { // 构建HTML页面 StringBuilder htmlBuilder = new StringBuilder(); htmlBuilder.append("") .append("") .append("") .append("") .append("") .append("") .append("") .append("") .append(mTableHtml != null ? mTableHtml : "
列1列2
") .append("") .append("") .append(""); String html = htmlBuilder.toString(); // 加载HTML mWebView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null); } private String generateDefaultTable(int rows, int cols) { StringBuilder html = new StringBuilder(); html.append(""); // 表头 html.append(""); for (int i = 0; i < cols; i++) { html.append(""); } html.append(""); // 数据行 for (int i = 0; i < rows; i++) { html.append(""); for (int j = 0; j < cols; j++) { html.append(""); } html.append(""); } html.append("
列").append(i + 1).append("
"); return html.toString(); } @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.btn_back) { finish(); } else if (id == R.id.btn_done) { // 获取表格HTML并返回 mWebView.evaluateJavascript("Android.onTableHtml(getTableHtml());", null); } else if (id == R.id.btn_add_row_above) { mWebView.evaluateJavascript("addRowAbove();", null); } else if (id == R.id.btn_add_row_below) { mWebView.evaluateJavascript("addRowBelow();", null); } else if (id == R.id.btn_delete_row) { mWebView.evaluateJavascript("deleteRow();", null); } else if (id == R.id.btn_add_col_left) { mWebView.evaluateJavascript("addColLeft();", null); } else if (id == R.id.btn_add_col_right) { mWebView.evaluateJavascript("addColRight();", null); } else if (id == R.id.btn_delete_col) { mWebView.evaluateJavascript("deleteCol();", null); } } private class TableEditInterface { @JavascriptInterface public void onTableHtml(String html) { // 返回表格HTML Intent intent = new Intent(); intent.putExtra(RESULT_TABLE_HTML, html); setResult(RESULT_OK, intent); finish(); } } }