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 : "")
.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("| 列").append(i + 1).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("
");
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();
}
}
}