我的应用程序由多个活动组成,它们都有一个共同的布局,即它们是抽屉布局,有一个工具栏,但它们有不同的主要内容。具体来说,他们的完整布局如下
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/relative_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/action_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
/>
.......main content, this is different for each activity..........
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
由于共享组件是在“父级别”定义的,因此我不确定如何构建这些布局,以便通用布局仅定义一次。是否有可能实现这一目标?感谢。
答案 0 :(得分:1)
两个选项:
使用ViewStub定义主布局,您将拥有不同的子布局。
ViewStub是一个不可见的,零大小的视图,可以懒得使用 在运行时膨胀布局资源。当ViewStub可见时, 或者,当调用inflate()时,布局资源会膨胀。该 ViewStub然后在其父级中使用膨胀的View或替换自身 观。
在每个Activity中设置相同的布局,然后将特定的子布局膨胀到ViewStub上。
如果您想避免在单个活动中使用大量代码,可能需要考虑使用Fragments。
其他一些指导您的主题:
答案 1 :(得分:0)
是的,可以使用Fragment。首先,对于此结构,您需要在FrameLayout
中定义activity_main.xml
。这个framelayout将随着时间的推移被片段的内容所取代。
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/container_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
</LinearLayout>
<FrameLayout
android:id="@+id/container_body"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</FrameLayout>
</LinearLayout>
<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="com.safallwa.zahan.oreader.FragmentDrawer"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
然后,您可以根据需要创建布局,并将类扩展为Fragment
。将这些新布局设置为Fragment类的contentView。现在,这些片段可以取代FrameLayout
activity_main
。假设我们有一个Framgent类名First_Fragment.Java
,那么我们可以通过以下代码替换activity_main framelayout来显示该片段
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container_body, fragment);//container_body is the id of the framelayout
fragmentTransaction.commit();
对于带导航抽屉的全功能示例,我们也可以按照以下链接