[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-4348":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":16,"starSnapshotCount":16,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},4348,"EffectiveAndroidUI","pedrovgs\u002FEffectiveAndroidUI","pedrovgs","Sample project created to show some of the best Android practices to work in the Android UI Layer. The UI layer of this project has been implemented using MVP or MVVM (without binding engine) to show how this patterns works. This project is used during the talk \"EffectiveAndroidUI\".","",null,"Java",5987,1187,345,4,0,40.22,"Apache License 2.0",false,"master",true,[],"2026-06-12 02:01:02","Effective Android UI [![Android Arsenal](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAndroid%20Arsenal-EffectiveAndroidUI-brightgreen.svg?style=flat)](https:\u002F\u002Fandroid-arsenal.com\u002Fdetails\u002F1\u002F1347)\n====================\n\n🔝 Top sponsors 🔝 \n\n[![EmergeLogo](https:\u002F\u002Fwww.emergetools.com\u002Fimages\u002Femergetoolsstandard.png)](https:\u002F\u002Fwww.emergetools.com)\n\nSample project created to reinforce some of the main concepts described in the tech talk \"Effective Android UI\".\n\nIn this repository you are going to find some interesting samples like:\n\n* **MVP** and **MVVM (without data binding engine)** samples.\n* How to use **fragments**.\n* How to use **Dagger to implement dependency injection**.\n* Use **resource qualifiers** to change the layout used in **different screen sizes**.\n* Use **resource qualifiers** to change the layout used in **different screen densities**.\n* Use **resource qualifiers** to change the layout in **different Android version**.\n* How to use **styles and themes**.\n* How to **communicate fragments** in the same activity.\n* **Butterknife** library usage to **avoid UI duplicated code**.\n* Uniform **naming** for Android resources.\n* How to use **Navigator** or **ActionCommands** to **implement the navigation** inside the application.\n* Use resource custom qualifiers to **split resource files by domain**.\n* Different **layout usage**: RelativeLayout, LinearLayout, FrameLayout.\n* Usage of **merge, include and view stub**.\n* Correct **ListView** implementation with **view recycle** using **Renderers**.\n* **Interactor implementation** described in the talk \"Software Design Patterns on Android\".\n* Usage of **Dagger to implement two different scopes: Application scope and Activity scope**.\n\nImplementation description\n--------------------------\n\n[EffectiveAndroid UI Video - Spanish][4]\n\n[EffectiveAndroid UI Slides - English][5]\n\nScreenshots\n------------\n\n![Demo Screenshot 1][1]\n![Demo Screenshot 2][2]\n![Demo Screenshot 3][3]\n\nLibraries used on the sample project\n------------------------------------\n\n* [Renderers][6]\n* [Dagger][7]\n* [Butterknife][8]\n* [Picasso][9]\n* [DraggablePanel][10]\n\n\nDeveloped By\n------------\n\n* Pedro Vicente Gómez Sánchez - \u003Cpedrovicente.gomez@gmail.com>\n\n\u003Ca href=\"https:\u002F\u002Fx.com\u002Fpedro_g_s\">\n  \u003Cimg alt=\"Follow me on X\" src=\"https:\u002F\u002Fimg.icons8.com\u002F?size=100&id=6Fsj3rv2DCmG&format=png&color=000000\" height=\"60\" width=\"60\"\u002F>\n\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fes.linkedin.com\u002Fin\u002Fpedrovgs\">\n  \u003Cimg alt=\"Add me to Linkedin\" src=\"https:\u002F\u002Fimg.icons8.com\u002F?size=100&id=447&format=png&color=000000\" height=\"60\" width=\"60\"\u002F>\n\u003C\u002Fa>\n\n\nLicense\n-------\n\n    Copyright 2014 Pedro Vicente Gómez Sánchez\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n[1]: .\u002Fart\u002Fscreenshot1.png\n[2]: .\u002Fart\u002Fscreenshot2.png\n[3]: .\u002Fart\u002Fscreenshot3.png\n[4]: https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=N6yqe88ysNw\n[5]: http:\u002F\u002Fwww.slideshare.net\u002FPedroVicenteGmezSnch\u002Feffective-android-ui-english\n[6]: https:\u002F\u002Fgithub.com\u002Fpedrovgs\u002FRenderers\n[7]: https:\u002F\u002Fgithub.com\u002Fsquare\u002Fdagger\n[8]: https:\u002F\u002Fgithub.com\u002FJakeWharton\u002Fbutterknife\n[9]: https:\u002F\u002Fgithub.com\u002Fsquare\u002Fpicasso\n[10]: https:\u002F\u002Fgithub.com\u002Fpedrovgs\u002FDraggablePanel\n","EffectiveAndroidUI 是一个旨在展示 Android UI 层最佳实践的示例项目。该项目通过 MVP 和 MVVM（不使用数据绑定引擎）模式实现，展示了如何在实际应用中运用这些架构模式。它还涵盖了片段的使用、Dagger 依赖注入、针对不同屏幕尺寸和密度以及 Android 版本的资源适配器、样式与主题的应用、片段间通信、Butterknife 库减少重复代码、统一命名规范、导航实现、自定义资源限定符按领域分割资源文件等内容。此外，项目中还包含了 RelativeLayout、LinearLayout、FrameLayout 等多种布局的使用案例，以及 ListView 的正确实现方法。适用于希望提高 Android 应用界面层开发质量的开发者学习参考。",2,"2026-06-11 02:59:46","top_language"]