From 2754a2ad7c0dfa1acd7dbd375f6dac52acae3d32 Mon Sep 17 00:00:00 2001 From: QingLong Date: Wed, 20 May 2026 21:00:01 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=A8=A1=E5=9D=97AES=20?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=9C=80=E6=96=B0=E6=97=B6=E9=97=B4=E6=A0=87?= =?UTF-8?q?=E7=AD=BEaes-v15.20.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aes/README.md | 2 +- aes/build.properties | 8 ++++---- aes/src/main/java/cc/winboll/studio/aes/App.java | 2 -- libaes/build.gradle | 2 +- libaes/build.properties | 8 ++++---- .../cc/winboll/studio/libaes/models/AESThemeBean.java | 2 +- .../studio/libaes/models/WinBoLLClientServiceBean.java | 2 +- 7 files changed, 12 insertions(+), 14 deletions(-) diff --git a/aes/README.md b/aes/README.md index 1606637..e99ec44 100644 --- a/aes/README.md +++ b/aes/README.md @@ -20,7 +20,7 @@ WinBoLL AndroidX 可视化元素类库。 1. Fork 本仓库 2. 新建 Feat_xxx 分支 -3. 提交代码 : ZhanGSKen(ZhanGSKen) +3. 提交代码 : ZhanGSKen(ZhanGSKen) 4. 新建 Pull Request diff --git a/aes/build.properties b/aes/build.properties index 42f9bd9..d3473ad 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue May 19 20:38:13 HKT 2026 -stageCount=8 +#Wed May 20 20:04:49 HKT 2026 +stageCount=9 libraryProject=libaes baseVersion=15.20 -publishVersion=15.20.7 +publishVersion=15.20.8 buildCount=0 -baseBetaVersion=15.20.8 +baseBetaVersion=15.20.9 diff --git a/aes/src/main/java/cc/winboll/studio/aes/App.java b/aes/src/main/java/cc/winboll/studio/aes/App.java index f6816f7..0a99369 100644 --- a/aes/src/main/java/cc/winboll/studio/aes/App.java +++ b/aes/src/main/java/cc/winboll/studio/aes/App.java @@ -18,8 +18,6 @@ public class App extends GlobalApplication { @Override public void onCreate() { super.onCreate(); - setIsDebugging(BuildConfig.DEBUG); - //setIsDebugging(false); WinBoLLActivityManager.init(this); // 初始化 Toast 框架 diff --git a/libaes/build.gradle b/libaes/build.gradle index c97935f..cfb95e3 100644 --- a/libaes/build.gradle +++ b/libaes/build.gradle @@ -66,7 +66,7 @@ dependencies { //annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' // WinBoLL库 nexus.winboll.cc 地址 - api 'cc.winboll.studio:libappbase:15.20.9' + api 'cc.winboll.studio:libappbase:15.20.18' // 备用库 jitpack.io 地址 //api 'com.github.ZhanGSKen:APPBase:appbase-v15.15.3' diff --git a/libaes/build.properties b/libaes/build.properties index 42f9bd9..d3473ad 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue May 19 20:38:13 HKT 2026 -stageCount=8 +#Wed May 20 20:04:49 HKT 2026 +stageCount=9 libraryProject=libaes baseVersion=15.20 -publishVersion=15.20.7 +publishVersion=15.20.8 buildCount=0 -baseBetaVersion=15.20.8 +baseBetaVersion=15.20.9 diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/models/AESThemeBean.java b/libaes/src/main/java/cc/winboll/studio/libaes/models/AESThemeBean.java index dd4d8d8..cc1517c 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/models/AESThemeBean.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/models/AESThemeBean.java @@ -8,7 +8,7 @@ package cc.winboll.studio.libaes.models; import android.util.JsonReader; import android.util.JsonWriter; import cc.winboll.studio.libaes.R; -import cc.winboll.studio.libappbase.BaseBean; +import cc.winboll.studio.libappbase.models.libs1520000.BaseBean; import java.io.IOException; public class AESThemeBean extends BaseBean { diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/models/WinBoLLClientServiceBean.java b/libaes/src/main/java/cc/winboll/studio/libaes/models/WinBoLLClientServiceBean.java index dcd112b..3f4e738 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/models/WinBoLLClientServiceBean.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/models/WinBoLLClientServiceBean.java @@ -7,7 +7,7 @@ package cc.winboll.studio.libaes.models; import android.content.Context; import android.util.JsonReader; import android.util.JsonWriter; -import cc.winboll.studio.libappbase.BaseBean; +import cc.winboll.studio.libappbase.models.libs1520000.BaseBean; import java.io.IOException; public class WinBoLLClientServiceBean extends BaseBean { From ab4cef21f0322980854a996b004a0e0fef3b3598 Mon Sep 17 00:00:00 2001 From: qinglong Date: Sun, 24 May 2026 10:00:01 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=A8=A1=E5=9D=97APPBase?= =?UTF-8?q?=20=E5=90=8C=E6=AD=A5=E6=9C=80=E6=96=B0=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=A0=87=E7=AD=BEappbase-v15.20.21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appbase/build.properties | 8 +- libappbase/build.properties | 8 +- .../studio/libappbase/views/AboutView.java | 61 ++++++++- .../views/DebugSwitchInfoImageView.java | 127 ++++++++++++++++++ .../res/layout-night/layout_about_view.xml | 5 +- .../src/main/res/layout/layout_about_view.xml | 5 +- 6 files changed, 198 insertions(+), 16 deletions(-) create mode 100644 libappbase/src/main/java/cc/winboll/studio/libappbase/views/DebugSwitchInfoImageView.java diff --git a/appbase/build.properties b/appbase/build.properties index 0fab579..f2d536c 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed May 20 16:12:13 HKT 2026 -stageCount=21 +#Sun May 24 09:53:05 HKT 2026 +stageCount=22 libraryProject=libappbase baseVersion=15.20 -publishVersion=15.20.20 +publishVersion=15.20.21 buildCount=0 -baseBetaVersion=15.20.21 +baseBetaVersion=15.20.22 diff --git a/libappbase/build.properties b/libappbase/build.properties index 0fab579..f2d536c 100644 --- a/libappbase/build.properties +++ b/libappbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed May 20 16:12:13 HKT 2026 -stageCount=21 +#Sun May 24 09:53:05 HKT 2026 +stageCount=22 libraryProject=libappbase baseVersion=15.20 -publishVersion=15.20.20 +publishVersion=15.20.21 buildCount=0 -baseBetaVersion=15.20.21 +baseBetaVersion=15.20.22 diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/views/AboutView.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/views/AboutView.java index 050a8b6..633bd04 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/views/AboutView.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/views/AboutView.java @@ -1,6 +1,8 @@ package cc.winboll.studio.libappbase.views; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; @@ -12,6 +14,7 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import android.widget.Toast; import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.R; @@ -74,12 +77,12 @@ public class AboutView extends LinearLayout { private EditText metDevUserPassword; // ===================================== 页面视图控件 ===================================== - private DebugSwitchImageView ivAppIcon; + private DebugSwitchInfoImageView ivAppIcon; private TextView tvAppNameVersion; private TextView tvAppDesc; private LinearLayout llFunctionContainer; private ImageButton ibSebugStepOver; - private ImageButton ibSigngetDialog; + private ImageButton ibDebugUnlock; private ImageButton ibWinBoLLHostDialog; // ===================================== 构造方法(按参数从少到多排序) ===================================== @@ -193,12 +196,12 @@ public class AboutView extends LinearLayout { llFunctionContainer = findViewById(R.id.ll_function_container); // 功能按钮绑定 ibSebugStepOver = findViewById(R.id.ib_debug_step_over); - ibSigngetDialog = findViewById(R.id.ib_signgetdialog); + ibDebugUnlock = findViewById(R.id.ib_debug_unlock); ibWinBoLLHostDialog = findViewById(R.id.ib_winbollhostdialog); // 调试按钮统一只在调试模式显示 ibWinBoLLHostDialog.setVisibility(GlobalApplication.isDebugging() ? View.VISIBLE : View.GONE); - //ibSigngetDialog.setVisibility(GlobalApplication.isDebugging() ? View.VISIBLE : View.GONE); + //ibDebugUnlock.setVisibility(GlobalApplication.isDebugging() ? View.VISIBLE : View.GONE); ibSebugStepOver.setVisibility(GlobalApplication.isDebugging() ? View.VISIBLE : View.GONE); // 绑定按钮点击事件 @@ -310,6 +313,47 @@ public class AboutView extends LinearLayout { LogUtils.d(TAG, "initAboutPageView():视图组装完成,功能项加载完毕"); } + // ===================================== 调试解锁弹窗 ===================================== + private void showDebugUnlockDialog() { + final AlertDialog dialog = new AlertDialog.Builder(mContext).create(); + dialog.setTitle("应用调试解锁"); + dialog.setCanceledOnTouchOutside(true); + + final EditText etToken = new EditText(mContext); + etToken.setHint("请输入调试Token"); + dialog.setView(etToken); + + dialog.setButton(DialogInterface.BUTTON_POSITIVE, "调试解锁", (DialogInterface.OnClickListener) null); + dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "关闭", (DialogInterface.OnClickListener) null); + dialog.setOnShowListener(new DialogInterface.OnShowListener() { + @Override + public void onShow(DialogInterface d) { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String inputToken = etToken.getText().toString().trim(); + String savedToken = DebugSwitchInfoImageView.getDebugToken(); + if (savedToken != null && savedToken.equals(inputToken)) { + GlobalApplication.setIsDebugging(true); + GlobalApplication.saveDebugStatus(GlobalApplication.getInstance()); + Toast.makeText(mContext, "调试解锁成功,重启应用后生效", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(mContext, "调试Token不匹配", Toast.LENGTH_SHORT).show(); + dialog.dismiss(); + } + } + }); + dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + } + }); + dialog.show(); + } + // ===================================== 内部工具/事件方法 ===================================== /** * 绑定功能按钮点击事件,处理正版校验、调试地址配置弹窗唤起 @@ -335,6 +379,15 @@ public class AboutView extends LinearLayout { new DebugHostDialog(mContext).show(); } }); + + // 应用调试解锁按钮 + ibDebugUnlock.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + LogUtils.d(TAG, "ibDebugUnlock onClick:弹出调试解锁对话框"); + showDebugUnlockDialog(); + } + }); LogUtils.d(TAG, "setBtnClickListener():功能按钮点击事件绑定完成"); } diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/views/DebugSwitchInfoImageView.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/views/DebugSwitchInfoImageView.java new file mode 100644 index 0000000..72679ed --- /dev/null +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/views/DebugSwitchInfoImageView.java @@ -0,0 +1,127 @@ +package cc.winboll.studio.libappbase.views; + +import android.app.AlertDialog; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import java.util.UUID; +import cc.winboll.studio.libappbase.GlobalApplication; + +/** + * @Author 豆包&ZhanGSKen + * @Date 2026/04/06 19:32 + * @Describe 应用Logo控件,连续点击6次弹出调试Token对话框,支持复制与重置 + */ +public class DebugSwitchInfoImageView extends ImageView { + + public static final String TAG = "DebugSwitchInfoImageView"; + + // 连续点击计数 + private int mClickCount = 0; + // 目标点击次数 + private static final int TARGET_CLICK_COUNT = 7; + + private static String mDebugToken = null; + private static final String SP_DEBUG_TOKEN = "debug_token_prefs"; + private static final String KEY_DEBUG_TOKEN = "debug_token"; + + public static String getDebugToken() { + if (mDebugToken != null) { + return mDebugToken; + } + Context context = GlobalApplication.getInstance(); + if (context != null) { + SharedPreferences sp = context.getSharedPreferences(SP_DEBUG_TOKEN, Context.MODE_PRIVATE); + mDebugToken = sp.getString(KEY_DEBUG_TOKEN, null); + if (mDebugToken == null) { + mDebugToken = UUID.randomUUID().toString(); + sp.edit().putString(KEY_DEBUG_TOKEN, mDebugToken).apply(); + } + } + return mDebugToken; + } + + public static void resetDebugToken() { + Context context = GlobalApplication.getInstance(); + if (context != null) { + mDebugToken = UUID.randomUUID().toString(); + SharedPreferences sp = context.getSharedPreferences(SP_DEBUG_TOKEN, Context.MODE_PRIVATE); + sp.edit().putString(KEY_DEBUG_TOKEN, mDebugToken).apply(); + } + } + + private void showDebugTokenDialog() { + final AlertDialog dialog = new AlertDialog.Builder(getContext()).create(); + dialog.setTitle("调试Token"); + dialog.setMessage(getDebugToken()); + dialog.setCanceledOnTouchOutside(true); + dialog.setButton(DialogInterface.BUTTON_POSITIVE, "复制到剪贴板", (DialogInterface.OnClickListener) null); + dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "重置", (DialogInterface.OnClickListener) null); + dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "关闭", (DialogInterface.OnClickListener) null); + dialog.setOnShowListener(new DialogInterface.OnShowListener() { + @Override + public void onShow(DialogInterface d) { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ClipboardManager cm = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); + cm.setPrimaryClip(ClipData.newPlainText("DebugToken", getDebugToken())); + } + }); + dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + resetDebugToken(); + dialog.setMessage(getDebugToken()); + } + }); + dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + } + }); + dialog.show(); + } + + public DebugSwitchInfoImageView(Context context) { + super(context); + init(); + } + + public DebugSwitchInfoImageView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public DebugSwitchInfoImageView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + public DebugSwitchInfoImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(); + } + + private void init() { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + mClickCount++; + if (mClickCount >= TARGET_CLICK_COUNT) { + mClickCount = 0; + showDebugTokenDialog(); + } + } + }); + } +} + diff --git a/libappbase/src/main/res/layout-night/layout_about_view.xml b/libappbase/src/main/res/layout-night/layout_about_view.xml index a1753ff..09db2eb 100644 --- a/libappbase/src/main/res/layout-night/layout_about_view.xml +++ b/libappbase/src/main/res/layout-night/layout_about_view.xml @@ -15,7 +15,7 @@ android:paddingRight="16dp" android:paddingBottom="16dp"> - diff --git a/libappbase/src/main/res/layout/layout_about_view.xml b/libappbase/src/main/res/layout/layout_about_view.xml index a1753ff..09db2eb 100644 --- a/libappbase/src/main/res/layout/layout_about_view.xml +++ b/libappbase/src/main/res/layout/layout_about_view.xml @@ -15,7 +15,7 @@ android:paddingRight="16dp" android:paddingBottom="16dp"> - From e3c30ea9a3a0df034b47856659a52568c2f0bfa2 Mon Sep 17 00:00:00 2001 From: qinglong Date: Sun, 24 May 2026 10:49:26 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=A8=A1=E5=9D=97AES=20?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=9C=80=E6=96=B0=E6=97=B6=E9=97=B4=E6=A0=87?= =?UTF-8?q?=E7=AD=BEaes-v15.20.9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aes/build.properties | 8 ++++---- libaes/build.gradle | 4 ++-- libaes/build.properties | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aes/build.properties b/aes/build.properties index d3473ad..bc15417 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed May 20 20:04:49 HKT 2026 -stageCount=9 +#Sun May 24 10:48:48 HKT 2026 +stageCount=10 libraryProject=libaes baseVersion=15.20 -publishVersion=15.20.8 +publishVersion=15.20.9 buildCount=0 -baseBetaVersion=15.20.9 +baseBetaVersion=15.20.10 diff --git a/libaes/build.gradle b/libaes/build.gradle index cfb95e3..73ac7bc 100644 --- a/libaes/build.gradle +++ b/libaes/build.gradle @@ -66,9 +66,9 @@ dependencies { //annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' // WinBoLL库 nexus.winboll.cc 地址 - api 'cc.winboll.studio:libappbase:15.20.18' + api 'cc.winboll.studio:libappbase:15.20.21' // 备用库 jitpack.io 地址 - //api 'com.github.ZhanGSKen:APPBase:appbase-v15.15.3' + //api 'com.github.ZhanGSKen:libappbase:appbase-v15.15.21' api fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/libaes/build.properties b/libaes/build.properties index d3473ad..bc15417 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed May 20 20:04:49 HKT 2026 -stageCount=9 +#Sun May 24 10:48:48 HKT 2026 +stageCount=10 libraryProject=libaes baseVersion=15.20 -publishVersion=15.20.8 +publishVersion=15.20.9 buildCount=0 -baseBetaVersion=15.20.9 +baseBetaVersion=15.20.10 From f3d723fbee066e734727f6e6e5e926607a4a2583 Mon Sep 17 00:00:00 2001 From: qinglong Date: Wed, 27 May 2026 15:00:01 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=A8=A1=E5=9D=97APPBase?= =?UTF-8?q?=20=E5=90=8C=E6=AD=A5=E6=9C=80=E6=96=B0=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=A0=87=E7=AD=BEappbase-v15.20.22?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appbase/build.properties | 8 ++++---- libappbase/build.properties | 8 ++++---- .../studio/libappbase/views/DebugSwitchInfoImageView.java | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/appbase/build.properties b/appbase/build.properties index f2d536c..8be0c6b 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun May 24 09:53:05 HKT 2026 -stageCount=22 +#Wed May 27 14:51:29 HKT 2026 +stageCount=23 libraryProject=libappbase baseVersion=15.20 -publishVersion=15.20.21 +publishVersion=15.20.22 buildCount=0 -baseBetaVersion=15.20.22 +baseBetaVersion=15.20.23 diff --git a/libappbase/build.properties b/libappbase/build.properties index f2d536c..8be0c6b 100644 --- a/libappbase/build.properties +++ b/libappbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun May 24 09:53:05 HKT 2026 -stageCount=22 +#Wed May 27 14:51:29 HKT 2026 +stageCount=23 libraryProject=libappbase baseVersion=15.20 -publishVersion=15.20.21 +publishVersion=15.20.22 buildCount=0 -baseBetaVersion=15.20.22 +baseBetaVersion=15.20.23 diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/views/DebugSwitchInfoImageView.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/views/DebugSwitchInfoImageView.java index 72679ed..6c03ff2 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/views/DebugSwitchInfoImageView.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/views/DebugSwitchInfoImageView.java @@ -59,7 +59,7 @@ public class DebugSwitchInfoImageView extends ImageView { final AlertDialog dialog = new AlertDialog.Builder(getContext()).create(); dialog.setTitle("调试Token"); dialog.setMessage(getDebugToken()); - dialog.setCanceledOnTouchOutside(true); + dialog.setCanceledOnTouchOutside(false); dialog.setButton(DialogInterface.BUTTON_POSITIVE, "复制到剪贴板", (DialogInterface.OnClickListener) null); dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "重置", (DialogInterface.OnClickListener) null); dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "关闭", (DialogInterface.OnClickListener) null);