集成友盟/ShareSDK 等分享面板後,默認底部無「取消」按鈕,點擊空白處才能關閉,用戶體驗差。
setShareContentCustomizeCallback、setViewFactory 或 XML 佈局覆蓋機制。OnekeyShare oks = new OnekeyShare();
oks.setCustomerCallback(new CustomerCallback() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_cancel) { // 你在佈局裡加的取消按鈕 ID
oks.finish(); // 關閉分享面板
}
}
});
oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() {
@Override
public void onShare(Platform platform, ShareParams params) {
// 可在這裡動態修改分享參數
}
});
// 關鍵:指定自定義佈局文件
oks.setTheme(new CustomTheme()); // 或 oks.setView(R.layout.my_share_layout);
oks.show(context);
FrameLayout 或 LinearLayout。id="@id/share_grid" 等,具體 ID 查 SDK 源碼或文檔)。Button android:id="@+id/btn_cancel" android:text="取消"。大多數 SDK 的 Dialog 已實現 setCanceledOnTouchOutside(true),若無效可嘗試:
// 在 show() 後拿到 Dialog 實例強制設置
oks.setDialogListener(new DialogListener() {
@Override
public void onShow(Dialog dialog) {
dialog.setCanceledOnTouchOutside(true);
}
// ...
});
不要硬改 SDK 內部代碼,利用官方暴露的 佈局替換 / ViewFactory / Callback 機制,在項目層定製 UI,升級 SDK 時代碼零衝突。