包括不工作

时间:2012-09-17 09:58:20

标签: android android-layout include

我尝试将其设置为我的活动布局:

<?xml version="1.0" encoding="utf-8"?>
<include layout="@layout/map_activity_base" />

如果我使用@layout/map_activity_base而不是包含它,则可行。为什么我不这样做的原因是因为你不能在大屏幕的布局中包含小屏幕的布局内容,但我需要不同布局的@layout/map_activity_base内容。

我得到的错误是

E/AndroidRuntime(11383): FATAL EXCEPTION: main
E/AndroidRuntime(11383): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.l_one.app.achileo/de.l_one.app.achileo.Main}: android.view.InflateException: Binary XML file line #2: Error inflating class include  
[...]  
E/AndroidRuntime(11383): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class include  
[...]  
E/AndroidRuntime(11383): Caused by: java.lang.ClassNotFoundException: android.view.include in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/de.l_one.app.achileo-1.apk]

所以似乎android认为<include />应该是View,但只有在我使用<include />而没有任何周围View的情况下才会发生

那么可以使用<include />而没有任何周围View,如果不是,那么实现我想要的最佳方式是什么?

Btw:我不知道这是否重要,但这是图书馆项目的内容。

编辑:map_activity_base.xml

<?xml version="1.0" encoding="UTF-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView android:id="@+id/listHeader"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:gravity="center"
    android:text="@string/listHeader"
    android:padding="5dp" />

<View android:id="@+id/divider"
    android:layout_width="100dp"
    android:layout_height="1dp"
    android:background="#333"
    android:layout_below="@id/listHeader" />

<de.l_one.app.map.base.POIListView android:id="@+id/poiList"
    android:layout_width="100sp"
    android:layout_height="match_parent"
    android:divider="#cccccc"
    android:dividerHeight="1dp"
    android:layout_alignParentLeft="true"
    android:layout_below="@id/divider"
    android:listSelector="@android:color/transparent" />

<com.google.android.maps.MapView
    android:id="@+id/mapview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_toRightOf="@id/poiList"
    android:clickable="true"
    android:apiKey="@string/googleAPIKey" />

<TextView android:id="@+id/cmtryNameTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:padding="5dp"
    android:background="@drawable/cmtry_txt_view_back" />

<TextView android:id="@+id/navigate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@id/cmtryNameTextView"
    android:padding="5dp"
    android:background="@drawable/cmtry_txt_view_back"
    android:visibility="gone"
    android:text="@string/navigate" />

</RelativeLayout>

2 个答案:

答案 0 :(得分:2)

我相信你至少需要在根视图中加入“include”。如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...

   <include layout="@layout/titlebar"/>

...

/&GT;

答案 1 :(得分:2)

看起来<include/>无法在布局的根目录中定义。如果您真的需要从包含开始,更好的方法是使用<merge/>

file fragment_map.xml

<?xml version="1.0" encoding="utf-8"?>
<!--
    the <merge/> tag must be the root element
    while it actually defines an xml include.
-->
<merge
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- insert some layout here -->

</merge>

文件activity_map.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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">

    <!-- then the <include/> tag can then reference it, while merging. -->
    <include
        layout="@layout/fragment_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</android.support.design.widget.CoordinatorLayout>