进阶指南
使用自定义的UISetting打开页面
SDK提供默认的UI布局用于打开离线包,UI布局元素配置如下:
//打开一个BID
TMFHybridManager.getInstance().startAppById(bid, getCustomUiSettings());
//打开一个URL
TMFHybridManager.getInstance().startAppByUrl(url, getCustomUiSettings());
private UISettings getCustomUiSettings() {
return new UISettings.Builder()
.fullScreen(false)//是否全屏
.dividerColor(getResources().getColor(R.color.poc_gray_D8D8D8))
.showDivider(false)
.showMainTitle(true)//是否展示主标题
.mainTitleText("银行业务交易")//主标题文本
.mainTitleTextColor(getResources().getColor(R.color.qmui_config_color_red))//主标题文本颜色
.showSubTitle(true)//是否展示副标题
.subTitleText("进行中")//副标题文本
.subTitleTextColor(getResources().getColor(R.color.app_color_blue))//副标题文本颜色
.setTitleViewBackGroundColor(getResources().getColor(R.color.color_default_black))
.setBackBtnIcon(R.mipmap.h5_default_back)//返回按钮icon
.showOptionMenu(true)//是否展示option menu
.optionMenuIcon0(R.drawable.brand_icon)
.optionMenuIcon1(R.mipmap.about_logo)
.showProgress(true)//是否展示架在进度条
.progressColor(getResources().getColor(R.color.qmui_config_color_red))//进度条颜色
.build();
}
使用完全自定义的H5页面
如果上诉的自定义UI不能满足H5页面的展示需求,可以按照如下方法实现对页面的完全自定义。值得一提的是,完全自定义的H5页面是全局生效。
//设置完全自定义的H5展示页面
TMFHybridManager.getInstance().setCustomView(new TestCustomViewProvider());
//移除完全自定义H5页面
TMFHybridManager.getInstance().setCustomView(null);
//实现 CustomViewProvider 接口,实现相关方法
public class TestCustomViewProvider implements CustomViewProvider {
@Override
public IH5TitleViewProvider createTitleView(Context context) {
return new TestCustomTitleView(context);
}
@Override
public IH5ContentViewProvider createH5ContentView(Context context) {
return new TestCustomContentView(context);
}
}
添加全局公共资源包
当制定打开的离线包对公共资源包有依赖时,可以通过下面方法增加对公共资源包的引用;确保通过BID打开离线包时可以正确找到对应的公共资源。
//添加全局公共资源包,bid对应公共资源包bid
TMFHybridManager.getInstance().addCommonResource(bid);
配置虚拟地址
通过BID打开离线包时,默认会使用 http://www.default.com 作为离线包的虚拟地址,可以调用如下的接口设置虚拟地址:
//设置虚拟地址
TMFHybridManager.getInstance().setVirtualAddress("https://www.qq.com");
附带参数打开离线包
当离线包有附加参数添加到Url,可以使用如下的方式进行参数传递:
Bundle bundle = new Bundle();
bundle.putString(OfflineAppBundleKey.KEY_ENTRANCE_PATH, entryPath);//入口文件路径,默认为index.html
bundle.putStringArray(OfflineAppBundleKey.KEY_COMMON_RESOURCES, commonRes);//公共资源包列表
bundle.putString(OfflineAppBundleKey.KEY_URL_PARAMS, stringOfUrlParams);//Url参数,Json字符串格式
//附带参数打开离线包
TMFHybridManager.getInstance().startAppById(id, bundle, UISettings.getDefault());
使用集成视图展示离线包或者URL
SDK中提供了EmbedView用于快速集成打开离线包或者URL。
public class EmbedViewTestActivity extends TopBarActivity {
private EmbedView embedView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
String bidOrUrl = "";
if (null != bundle) {
bidOrUrl = bundle.getString("key_bid_url");
}
//获取EmbedView实例,并添加到布局
embedView = TMFHybridManager.getInstance().getOfflineContentView(this, bidOrUrl);
FrameLayout frameLayout = findViewById(R.id.embed_view_container);
frameLayout.addView(embedView,
new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}
@Override
protected void onResume() {
super.onResume();
embedView.onResume();
}
@Override
protected void onStop() {
super.onStop();
embedView.onStop();
}
@Override
protected void onPause() {
super.onPause();
embedView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
embedView.onDestroy();
}
@Override
protected View getContentView() {
return LayoutInflater.from(this).inflate(R.layout.activity_embed_view_test, null, false);
}
}
设置在线资源域名
可以通过下面的方法设置离线包对应的在线资源地址。
//设置在线资源域名
TMFHybridManager.getInstance().setHostForOnlineApp("http://www.qq.com");