好的,这可能有点棘手,但是我想知道这是否可能。
比方说,我有一个主要的活动布局-包含一个include
,其中包含一个特定的片段-名为activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- some other things... -->
<include
android:id="@+id/mainContent"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/itemBelow"
app:layout_constraintTop_toBottomOf="@+id/itemAbove">
<!-- load fragments here -->
</include>
<!-- some other things... -->
</android.support.constraint.ConstraintLayout>
并且我有一个片段布局,例如:fragment_1.xml
。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- something... -->
</android.support.constraint.ConstraintLayout>
我知道在activity_main.xml
中,我可以通过在fragment_1.xml
中添加tools:layout="@layout/fragment_1"
来预览include
;
在fragment_1.xml
中,我可以通过在基础activity_main.xml
中添加tools:showIn="@layout/activity_main"
来预览ConstraintLayout
。
但是这里有一个问题:对于可重复使用的布局设计,include
中可能会显示另一个片段,如果我按照上述方法操作-假设在{ {1}}我写:
fragment_2.xml
我只会在<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:showIn="@layout/activity_main">
<!-- something... -->
</android.support.constraint.ConstraintLayout>
的预览中看到fragment_1.xml
。
在Android Studio中预览activity_main.xml
时,是否有任何可能的方式在fragment_2.xml
中显示activity_main.xml
?
此外:如果fragment_2.xml
中有更多include
,该方法仍然有效吗?
答案 0 :(得分:0)
想要的东西是不可能的(无论如何,现在还是这样)。
布局预览不执行任何Android代码(没有Java,没有Kotlin)。它所做的只是解析XML树并向您展示XML表示要显示的内容。
布局预览无法执行通常会应用布局的活动代码
在tools:layout
标签上使用<fragment>
时,您说的是“显示此布局而不是灰色正方形”。在根目录布局标签上使用tools:showIn
时,是说“显示此 other 布局,而不是常规预览”。这里没有“智能”可以确定您要预览显示的视图在其中不包含其他布局的“内部”。它只是盲目地向您显示activity_main
的布局预览(反过来,盲目地包含fragment_1
的布局)。
要以极其明显的眼光看待这一点,请想象以下两种布局:
activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="first"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="second"/>
</LinearLayout>
itemview.xml
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HELLO WORLD"/>
</FrameLayout>
尽管<fragment>
中没有<include>
或activity_main.xml
标签,但itemview.xml
的布局编辑器预览只会向您显示“第一”和“第二” 。 tools:showIn
属性可以完全覆盖普通预览。