Hi ,
I've created an mobile application from drawer sample application.
In one of my views, i have a listview wich exceeds the screen.
http://www.telerik.com/forums/scroller-repositioning-problem-after-keyboard-dismissed-in-appbuilder
As you can see in the the above link, there is a known issue with scroll view when keyboard is dismissed and the way to fix it is to enabled the native scroll.
However native scroll can't be used with drawer, so what can i do to fix that ?
Thank you
7 Answers, 1 is accepted
You can use the Drawer with native scrolling enabled. Additionally, it is possible to apply native scrolling to a single view, where you need it, and not to the entire app. Try setting data-use-native-scrolling="true" in the View containing inputs and see if the problem with the keyboard remains. If so, please show us your full View definition.
Regards,
Tsvetina
Progress Telerik
Visit the Telerik Verified Plugins Marketplace and get the custom Cordova plugin you need, already tweaked to work seamlessly with AppBuilder.
Hi Tsvetina,
http://docs.telerik.com/kendo-ui/controls/hybrid/native-scrolling
I can see
"The hybrid Kendo UI Drawer widget does not support content scrolling."
So this is my code :
<div data-role="view" id="tabstrip-infos" data-title="Informations" data-layout="mobile-tabstrip" data-model="app.infos" data-init="app.infos.dataInit" data-show="app.infos.dataShow" data-use-native-scrolling="true"> ...</div><div data-role="view" id="tabstrip-materiel" data-title="Materiel" data-layout="mobile-tabstrip" data-model="app.materiel">...</div><div data-role="view" id="tabstrip-temps" data-title="Temps passé" data-layout="mobile-tabstrip" data-model="app.temps" data-show="app.temps.onShow">...</div>
Scrolling works on second view but not on the first. (Both are contained in tabstrip wich is in html page contained into the drawer)
<div data-role="layout" data-id="mobile-tabstrip" data-show="showDemoLayout"> <div data-role="footer"> <div data-role="tabstrip" data-selected-index="0"> <a href="#tabstrip-infos" data-icon="info">Infos</a> <a href="#tabstrip-materiel" data-icon="cart" data-badge="0">Materiel</a> </div> </div></div>
<body id="kendoUiMobileApp"> <div id="appDrawer" data-role="drawer" data-title="Menu" data-model="app.drawerModel" data-swipe-to-open-views="['listeBT','tabstrip-infos','tabstrip-materiel','tabstrip-temps','tabstrip-finaliser','finalBT']"> <header data-role="header"> <div data-role="navbar"> <span data-role="view-title"></span> </div> </header> <ul id="navigation-container" data-role="listview"> <li><a href="components/btEncours/listeBT.html" data-icon="organize">Bons en cours</a></li> <li><a href="components/btTermines/finalBT.html" data-icon="mostviewed">Bons terminés</a></li> <li><a data-bind="click: logOut" data-icon="action">Se déconnecter</a> </li> </ul> </div></body>This limitation means that the Drawer will not scroll if native scrolling is enabled. I did test a Drawer app with native scrolling enabled and noticed some glitches only when the setting is enabled globally for the Application. When I apply it to specific views, the Drawer is scrollable and behaves as expected.
However, if I understand correctly, scrolling back to top does not work even after applying data-use-native-scrolling="true" for your View. Is this so? If this is the case, could you share with us your View content—you could replace sensitive information with hard-coded strings. Also, can you specify what device and OS you are testing this on?
Regards,
Tsvetina
Progress Telerik
Visit the Telerik Verified Plugins Marketplace and get the custom Cordova plugin you need, already tweaked to work seamlessly with AppBuilder.
Hello,
thank you for this clarification.
When i enable scrolling to a specific view, i can't even scroll on this view.
Here my full code (i'm testing the app on android 7 and VS 2017 extension Simulator).
001.<div data-role="view" id="tabstrip-infos" data-title="Informations" data-layout="mobile-tabstrip" data-model="app.infos" data-init="app.infos.dataInit" data-show="app.infos.dataShow" data-use-native-scrolling="true"> 002. <ul data-role="listview" data-type="group">003. <li>004. Date intervention005. <ul data-role="listview" data-style="inset">006. <li>007. <input id="input_date_inter" type="date" data-bind="value: bd_date_inter" disabled />008. </li>009. </ul>010. </li>011. <li>012. Informations maintenance013. <ul data-role="listview" data-style="inset">014. <li>015. <label class="km-label-above">016. Type:017. <select data-bind="value: bd_type" disabled>018. <option value="0">Préventive</option>019. <option value="1">Corrective</option>020. </select>021. </label>022. </li>023. <li>024. <label class="km-label-above">025. Code site:026. <input id="input_reference" type="text" value="Text" data-bind="value: bd_reference" disabled />027. </label>028. </li>029. <li>030. <label class="km-label-above">031. Nom de la personne qui réceptionne le site:032. <input id="input_nom_recept" type="text" value="Text" data-bind="value: bd_nomRecept" />033. </label>034. </li>035. </ul>036. </li>037. <li>038. Travail effectué039. <ul>040. <li>041. <textarea id="input_effectue" data-bind="value: bd_effectue" style="resize: none"></textarea>042. </li>043. </ul>044. </li>045. <li>046. Travail restant047. <ul>048. <li>049. <textarea id="input_restant" data-bind="value: bd_restant" style="resize: none"></textarea>050. </li>051. </ul>052. </li>053. <li>054. Observations055. <ul>056. <li>057. <textarea id="input_observations" data-bind="value: bd_observations" style="resize: none"></textarea>058. </li>059. </ul>060. </li>061. 062. </ul>063.</div>064. 065.<div data-role="view" id="tabstrip-materiel" data-title="Materiel" data-layout="mobile-tabstrip" data-model="app.materiel">066. 067. <table style="width:100%">068. <tr>069. <td style="vertical-align:top;">070. <div data-role="scroller" style="height: calc(100vh - 50px);">071. <ul id="lvMaterielStock" data-role="listview" data-bind="source: srcStock , events { click: onClickStock }" data-template="StockTemplate" data-filterable="{ field: 'code_article', placeholder: 'Rechercher...', operator: 'contains', ignoreCase: true }"></ul>072. </div>073. </td>074. <td style="vertical-align:top;">075. <div data-role="scroller" style="height: calc(100vh - 50px);">076. <ul id="lvMaterielUsed" data-role="listview" data-bind="source: srcUsed , events { click: onClickUsed }" data-template="UsedTemplate" data-filterable="{ field: 'code_article', placeholder: 'Rechercher...', operator: 'contains', ignoreCase: true }"></ul>077. </div>078. </td>079. </tr>080. </table>081. 082.</div>083. 084. 085.<div data-role="view" id="tabstrip-temps" data-title="Temps passé" data-layout="mobile-tabstrip" data-model="app.temps" data-show="app.temps.onShow">086. <table style="width:100%">087. <tr>088. <td style="vertical-align:top;width:120px;">089. <ul id="lvJours" data-role="listview" data-bind="source: srcJours , events { click: onClickJOurs }" data-template="joursTemplate" ></ul>090. </td>091. <td style="vertical-align:top;">092. <ul id="lvLundi" data-role="listview" data-style="inset">093. <li>094. <label class="km-label-above">095. Trajet096. <input id="input_lundi" data-bind="value: bd_trajet_lundi" type="text" style="width:70px;" />097. </label>098. </li>099. <li>100. <label class="km-label-above">101. Heure d'arrivée102. <input id="tp_lundi_a" data-bind="value: bd_arrivee_lundi" type="time" style="width:70px;" />103. </label>104. </li>105. <li>106. <label class="km-label-above">107. Heure départ108. <input id="tp_lundi_d" data-bind="value: bd_depart_lundi" type="time" style="width:70px;" />109. </label>110. </li>111. </ul>112. <ul id="lvMardi" data-role="listview" data-style="inset">113. <li>114. <label class="km-label-above">115. Trajet116. <input id="input_mardi" data-bind="value: bd_trajet_mardi" type="text" style="width:70px;" />117. </label>118. </li>119. <li>120. <label class="km-label-above">121. Heure d'arrivée122. <input id="tp_mardi_a" data-bind="value: bd_arrivee_mardi" type="time" style="width:70px;" />123. </label>124. </li>125. <li>126. <label class="km-label-above">127. Heure départ128. <input id="tp_mardi_d" data-bind="value: bd_depart_mardi" type="time" style="width:70px;" />129. </label>130. </li>131. </ul>132. <ul id="lvMercredi" data-role="listview" data-style="inset">133. <li>134. <label class="km-label-above">135. Trajet136. <input id="input_mercredi" data-bind="value: bd_trajet_mercredi" type="text" style="width:70px;" />137. </label>138. </li>139. <li>140. <label class="km-label-above">141. Heure d'arrivée142. <input id="tp_mercredi_a" data-bind="value: bd_arrivee_mercredi" type="time" style="width:70px;" />143. </label>144. </li>145. <li>146. <label class="km-label-above">147. Heure départ148. <input id="tp_mercredi_d" data-bind="value: bd_depart_mercredi" type="time" style="width:70px;" />149. </label>150. </li>151. </ul>152. <ul id="lvJeudi" data-role="listview" data-style="inset">153. <li>154. <label class="km-label-above">155. Trajet156. <input id="input_jeudi" data-bind="value: bd_trajet_jeudi" type="text" style="width:70px;" />157. </label>158. </li>159. <li>160. <label class="km-label-above">161. Heure d'arrivée162. <input id="tp_jeudi_a" data-bind="value: bd_arrivee_jeudi" type="time" style="width:70px;" />163. </label>164. </li>165. <li>166. <label class="km-label-above">167. Heure départ168. <input id="tp_jeudi_d" data-bind="value: bd_depart_jeudi" type="time" style="width:70px;" />169. </label>170. </li>171. </ul>172. <ul id="lvVendredi" data-role="listview" data-style="inset">173. <li>174. <label class="km-label-above">175. Trajet176. <input id="input_vendredi" data-bind="value: bd_trajet_vendredi" type="text" style="width:70px;" />177. </label>178. </li>179. <li>180. <label class="km-label-above">181. Heure d'arrivée182. <input id="tp_vendredi_a" data-bind="value: bd_arrivee_vendredi" type="time" style="width:70px;" />183. </label>184. </li>185. <li>186. <label class="km-label-above">187. Heure départ188. <input id="tp_vendredi_d" data-bind="value: bd_depart_vendredi" type="time" style="width:70px;" />189. </label>190. </li>191. </ul>192. <ul id="lvSamedi" data-role="listview" data-style="inset">193. <li>194. <label class="km-label-above">195. Trajet196. <input id="input_samedi" data-bind="value: bd_trajet_samedi" type="text" style="width:70px;" />197. </label>198. </li>199. <li>200. <label class="km-label-above">201. Heure d'arrivée202. <input id="tp_samedi_a" data-bind="value: bd_arrivee_samedi" type="time" style="width:70px;" />203. </label>204. </li>205. <li>206. <label class="km-label-above">207. Heure départ208. <input id="tp_samedi_d" data-bind="value: bd_depart_samedi" type="time" style="width:70px;" />209. </label>210. </li>211. </ul>212. </td>213. </tr>214. </table>215. 216.</div>217. 218. 219.<div data-role="view" id="tabstrip-finaliser" data-title="Finaliser" data-layout="mobile-tabstrip" data-model="app.finaliser">220. 221. <a data-role="button" class="km-primary" data-bind="click: saveBT" style="display: block; margin: 2em; text-align: center;">Sauvegarder</a>222. <a data-role="button" class="km-primary" data-bind="click: createPDF" style="display: block; margin: 2em; text-align: center;">PDF</a>223. <table style="width:100%;">224. <tr>225. <th>Technicien</th>226. <th>Client</th>227. </tr>228. <tr>229. <td style="text-align:center;">230. <img id="imgSignTech" data-bind="click: createSignTech" height="100" width="100" />231. </td>232. <td style="text-align:center;">233. <img id="imgSignClient" data-bind="click: createSignClient" height="100" width="100" />234. </td>235. </tr>236. </table>237. 238.</div>239. 240.<div data-role="layout" data-id="mobile-tabstrip" data-show="showDemoLayout">241. <div data-role="footer">242. <div data-role="tabstrip" data-selected-index="0">243. <a href="#tabstrip-infos" data-icon="info">Infos</a>244. <a href="#tabstrip-materiel" data-icon="cart" data-badge="0">Materiel</a>245. <a href="#tabstrip-temps" data-icon="recents">Temps passé</a>246. <a href="#tabstrip-finaliser" data-icon="play">Finaliser</a>247. </div>248. </div>249.</div>250. 251.<script type="text/x-kendo-template" id="StockTemplate">252. <h3>#: code_article #</h3>253. <p>#: type #</p>254.</script>255. 256.<script type="text/x-kendo-template" id="UsedTemplate">257. <h3>#: code_article # (#: qty #)</h3>258. <p>#: type #</p>259.</script>260. 261.<script type="text/x-kendo-template" id="joursTemplate">262. #: jour #263.</script>01.<!DOCTYPE html>02.<html>03. 04.<head>05. <title></title>06. <meta charset="utf-8">07. <meta name="viewport" content="initial-scale=1, maximum-scale=1, width=device-width">08. <link href="kendo/styles/kendo.mobile.all.min.css" rel="stylesheet">09. <link href="kendo/styles/kendo.common.min.css" rel="stylesheet">10. 11. 12. <link href="styles/overrides.css" rel="stylesheet">13. <link href="styles/main.css" rel="stylesheet">14. <link href="styles/perso.css" rel="stylesheet">15. 16. <script src="cordova.js"></script>17. <script src="kendo/js/jquery.min.js"></script>18. <script src="kendo/js/kendo.all.min.js"></script>19. <script src="app.js"></script>20. 21. <script src="components/btTermines/index.js"></script>22. <script src="components/btEncours/index.js"></script>23. <script src="components/Authentication/index.js"></script>24. 25.</head>26. 27.<body id="kendoUiMobileApp">28. 29. <div id="appDrawer" data-role="drawer" data-title="Menu" data-model="app.drawerModel" data-swipe-to-open-views="['listeBT','tabstrip-infos','tabstrip-materiel','tabstrip-temps','tabstrip-finaliser','finalBT']">30. <header data-role="header">31. <div data-role="navbar">32. <span data-role="view-title"></span>33. </div>34. </header>35. <ul id="navigation-container" data-role="listview">36. <li><a href="components/btEncours/listeBT.html" data-icon="organize">Bons en cours</a></li>37. <li><a href="components/btTermines/finalBT.html" data-icon="mostviewed">Bons terminés</a></li>38. <li><a data-bind="click: logOut" data-icon="action">Se déconnecter</a> </li>39. </ul>40. </div>41. 42.</body>43. 44.</html>My problem was i used kendo.all.min.js.
With kendo.mobile.min.js it works but now i can't use kendo datepicker. I will use a normal one.
Using kendo.all.min.js instead of kendo.mobile.min.js should not be causing such problems by itself if both libraries have the same version. Actually, kendo.all.min.js contains the scripts from kendo.mobile.min.js plus the web and DataViz widgets and features. It is possible that a JavaScript error or some functionality from the web widgets that you used was causing the issue with scrolling.
Anyway, it is recommended to use the HTML form controls (numeric, date inputs, select element, etc.) instead of their Kendo UI Web counterparts in Cordova apps, as the HTML elements produce more native look for mobile devices with a smaller HTML output and no additional JavaScript.
Regards,
Tsvetina
Progress Telerik
Visit the Telerik Verified Plugins Marketplace and get the custom Cordova plugin you need, already tweaked to work seamlessly with AppBuilder.