是否有可能在
ViewPager
中显示预览版面?
安卓工作室
like in
ListView
/
RecyclerView
/etc.?
Android Studio中的ViewPager预览布局
简短的回答。没有。
我想你说的是ViewPager 2中的ViewPager。我的答案将是假设ViewPager 2。请更新问题以澄清这一点。
- Workaround: a hidden include
<include
android:visibility="gone"
tools:visibility="visible"
layout="@layout/item_that_shows_inside_viewholder"/>
而且我同意这是一个非常糟糕的方法。
如果在约束布局中,你可以松散地匹配相同的约束,使其显示在上面。是的,你会在生产代码中膨胀这个,所以你可能会招致性能下降,这取决于你有什么。
非常不幸的是,tools:layout
不存在,也不能正常工作(是的,我在尝试时得到了不一致的结果)。
- 2nd less worst way is using isInEditMode
on code on the parent class
时尚的东西
class CustomView ....
init {
// inflate layout that contains ViewPager
if ( isInEditMode() ) {
//do something that replaces ViewPager with its inflated view holder
当我可以使用时,这对我来说很有帮助。然而,这对大多数地方来说是不合适的。
- If at least ViewPager were not final we could extend and do some tricks there using isInEditMode
like above.
- You can make a custom class wrapper with internal field ViewPager
有一种方法确实可行,那就是让你的自定义类扩展FrameLayout,并有一个内部视图作为你真正的ViewPager。但是,你必须重新实现和委托它的所有方法,这是一个很大的痛苦。也许kotlin有办法做到这一点,但到目前为止我还不知道怎么做。或者,使用反射或kotlin poet也是一种方法。这对我来说太冒险了。
- If we could make a databinding adapter to do the isInEditMode
like above it would work. But databinding adapters don't run in preview.
- I tend to think these tools attributes get processed by Android Studio, so it would take probably an android studio plugin to work around it.
这是目前工具属性的完整列表。https://developer.android.com/studio/write/tool-attributes.html#toolslistitem_toolslistheader_toolslistfooter
阅读以下内容可能会有所帮助Android XML 是否有办法使用带有自定义属性的工具命名空间?
其中提到了一个可以用工具读取自定义属性的库。这个库可能有一个替代品,但我从来没有用过它,不知道它是如何工作的。
https://github.com/giljulio/sneakpeek
我很想证明自己是错的,但在我看来,所有的选择都是死胡同,或者太费劲了。
Arhan Ashik
发布于
2019-10-24
0
人赞同
在Andriod studio中,有些视图在运行时显示,但在编译时不显示。思考一下
框架布局
作为一个
容器
for fragment transaction. We may place any kind of views on that 容器 in run time. So, it's not possible to show a view while coding. The
视图器
在这里扮演着同样的角色。所以,在运行和实际放置一个片段/其他视图之前,我们不能在那里显示一个视图。
我希望你现在明白了。)
Martin Zeitler
发布于
2019-10-24
0
人赞同
这是有可能的,当把
ViewPager
放到它自己的XML布局资源中。
与此类似,人们可以显示所需的
Fragment
,而不是
ViewPager
。
<fragment
android:id="@+id/fragment_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout="@layout/fragment_viewpager"
tools:layout="@layout/fragment_preview" />
这也为navigation
图形设计视图提供了XML预览。
tools:
布局 only works with fragment
, but not with include
.
MelOS
发布于
2019-10-24
0
人赞同
虽然我不认为开箱就有这样的功能,但我使用了以下工作方法来实现ViewPager的设计时间预览。
Add an
<include>
with the view that you will use in your ViewPager as a layout,just after the ViewPager itself
Set tools:visibility="visible" and android:visibility="gone" to this
<include>
view so that it will be visible at design time but not at runtime. Also set tools:visibility="gone" to the ViewPager so that it will be invisible at design time.
我们的想法是在设计时隐藏ViewPager并显示其内容,而在运行时做相反的事情。这应该也适用于其他控件。
举一个例子。
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tabl1"
tools:visibility="gone">
</androidx.viewpager.widget.ViewPager>
<include
layout="@layout/fragment_example1"
android:layout_width="match_parent"
android:layout_height="wrap_content"