我有一个教程应用程序,它加载一个教程页面列表[这是网页]。这些页面占据全屏,大约100dp用于菜单栏。虽然不能按原样共享源代码,但下面是Tutorial Activity的伪代码。
HashMap<Integer, customWebView > mapPage;
onCreate(){
updateScreen();
}
updateScreen(){
Instantiate CustomScrollView(Customized HorizontalScrollView);
Instantiate scrollViewChildHolder (LinearLayout with horizontal orientation);
Instantiate mapPage;
for index : total page size{
Instantiate pageHolder(RelativeLayout);
Instantiate customWebView (Custom WebView);//Takes orientation as one of argument
Set html page url;//customWebView has a method loadWebPage() which loads this url.
Add customWebView to pageHoler;
mapPage.put(index, customWebView);
Add pageHolder to scrollViewChildHolder;
}
//pageNo which will be safely fetched from saved state. So it will be 1 on first start
//and on orientation change retains current reading page.
onPageChange(pageNo);
}
//Custom callback on page swipe by user
@Override
onPageChange(int pageNo){
//Custom method which loads html page from url which was set in updateScreen()
mapPage.get(pageNo).loadWebPage();
//unloadNeighbouring pages
//Will pick pageNo+2 & pageNo-2 pages and clears their content.
unloadNeighbouringPagesTo(pageNo);
}
PS:
我必须在WebView上添加几个按钮,因此我们使用RelativeLayout作为页面包装器。
我无法选择适配器[PagerAdapter for ViewPager],因为它会导致webview在加载时突然闪现其内容,这是我们无法负担的。所以CustomHorizontalSrollView对我们来说是必须的。
我将在scrollview上添加大约150多页。
我有另外的页面分别为landsape&amp;肖像模式。因此,我需要重新定位方向变化。每个屏幕方向的视图大小也不同。
我没有覆盖onConfigurationChanged(..)。即在方向改变时,活动生命周期从新鲜开始。
问题:
在方向更改时,加载页面内容需要2-3秒。此外,似乎应用程序很晚才检测到方向变化。
请建议我如何提高快速加载方向更改的效果。
答案 0 :(得分:0)
你可以做一件事创建一个布局文件,其中包含方向横向和纵向的设计。并覆盖OnConfigurationChange();
<强> mnifest.xml 强>
<activity
android:name="YourActivity"
android:configChanges="keyboardHidden|orientation|screenSize" // this will not refresh your activity
/>
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
//visible landscape layout
//hide portrait layout
}else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
//visible portrait layout
//hide landscape layout
}
}