Android Studio中的ViewPager预览布局

Dan*_* H. 28 android android-layout android-viewpager android-studio

是否可以在/ 或等ViewPager中显示AndroidStudio中的预览布局?ListViewRecyclerView

Fab*_*bio 7

简短回答:不。

我认为您正在谈论 ViewPager 2 中的 ViewPager。我的答案将假设 ViewPager 2。请更新问题以澄清这一点。

- 解决方法:隐藏包含

<include 
            android:visibility="gone"
            tools:visibility="visible"
            layout="@layout/item_that_shows_inside_viewholder"/>
Run Code Online (Sandbox Code Playgroud)

我同意这是一种非常糟糕的方法。如果在约束布局中,您可以松散地匹配相同的约束,使其显示在顶部。是的,您将在生产代码中对此进行膨胀,因此您可能会导致性能下降,具体取决于您所拥有的内容。

非常不幸的是,它tools:layout不存在或无法正常工作(是的,我在尝试时得到了不一致的结果)。

- 第二个不太糟糕的方法是isInEditMode在父类的代码上使用

时尚的东西

class CustomView ....
init {
    // inflate layout that contains ViewPager
    if ( isInEditMode() ) {
      //do something that replaces ViewPager with its inflated view holder
    } 
}
Run Code Online (Sandbox Code Playgroud)

当我可以使用它时,这对我很有帮助。但这并不适合大多数地方。

- 如果至少 ViewPager 不是最终版本,我们可以使用isInEditMode上面的方法扩展并做一些技巧。

- 您可以使用内部字段 ViewPager 制作自定义类包装器

一种确实有效的方法是让您的自定义类扩展 FrameLayout 并拥有一个内部视图,即您的实际 ViewPager。但随后你必须重新实现并委托它的所有方法,这是一个很大的痛苦。也许 kotlin 有办法做到这一点,但到目前为止我不知道怎么做。或者也许使用反射或 kotlin 诗人可能是一种方法。这对我来说太冒险了。

- 如果我们可以制作一个数据绑定适配器来执行isInEditMode上述操作,那么它就会起作用。但数据绑定适配器不会在预览中运行。

- 我倾向于认为这些工具属性由 Android Studio 处理,因此可能需要一个 android studio 插件来解决它。

这是当前工具属性的完整列表:https://developer.android.com/studio/write/tool-attributes.html#toolslistitem_toolslistheader_toolslistfooter

阅读此 Android XML 可能会有用有没有办法将工具命名空间与自定义属性一起使用?

其中提到了使用工具读取自定义属性的库。这个库可能有替代方案,但我从未使用过它,也不知道它是如何工作的: https: //github.com/giljulio/sneakpeek

我很乐意被证明是错误的,但在我看来,所有的选择都是死胡同或需要太多的努力。


小智 -1

我认为这不是......有些布局在编码或设计时没有预览......比如 TabLayout