android:如何在Android Studio中预览非默认片段xml

时间:2018-12-04 03:41:33

标签: android xml android-studio

好的,这可能有点棘手,但是我想知道这是否可能。

比方说,我有一个主要的活动布局-包含一个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,该方法仍然有效吗?

1 个答案:

答案 0 :(得分:0)

想要的东西是不可能的(无论如何,现在还是这样)。

布局预览不执行任何Android代码(没有Java,没有Kotlin)。它所做的只是解析XML树并向您展示XML表示要显示的内容。

来自the tools documentation

  

布局预览无法执行通常会应用布局的活动代码

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属性可以完全覆盖普通预览。