我尝试将其设置为我的活动布局:
<?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
,如果不是,那么实现我想要的最佳方式是什么?
编辑: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>
答案 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>