【问题标题】:How to avoid code duplication in android xml如何避免android xml中的代码重复
【发布时间】:2016-06-09 07:11:10
【问题描述】:

我有一个 Android 应用程序,其中几乎所有活动都有侧边菜单。为此,我必须在我的活动 xml 中添加一个抽屉布局和一些其他项目,以获得一致的 UI。 例如

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include layout="@layout/toolbar"
            android:id="@+id/toolbar_container"/>

        <<--ACTIVITY_XML-->>

    </RelativeLayout>
</android.support.v4.widget.DrawerLayout>

有什么办法可以不一次又一次地复制代码。

我想到了一种方法,将&lt;&lt;--ACTIVITY_XML--&gt;&gt; 替换为包含标签。然后我会在我的基本活动中覆盖setContentView(),我会在其中膨胀上述基本布局,然后在其中膨胀包含标签。这种方式在内存和时间利用方面是好是坏。

【问题讨论】:

  • 搜索包含和合并标签以实现更好的优化
  • 您可以将 1 个 Activity 用作带有常用 UI 元素和抽屉的主容器,然后在该 Activity 中使用 replace Fragment,这是推荐的方法。

标签: android android-layout code-reuse


【解决方案1】:

有两种方法:

  1. 在您的超级活动类中覆盖 setContentView,并从代码中扩展您的根布局中的实例活动布局。
  2. 除了 merge 标签之外,还使用 ​​include 标签来优化每个活动布局中的性能。

就个人而言,在我的应用程序中,我更喜欢覆盖 setContentView 以在每个活动中插入工具栏,为每个活动保留一个布局,复制根布局。

在您的情况下,使用“根”布局扩展自定义活动 xml 来集中代码可能会更好。但是,例如,如果将来您想为一项活动移除抽屉,则必须对其进行管理。

【讨论】:

  • 你能解释一下第二种方法吗?关于抽屉不存在一个活动,我创建了两个 baseActivity - baseActivity,sideBarActivity。但是对于 sideBarActivity,工具栏和类似的东西也可能有一些变化,你有什么解决方案
  • 使用第二种方法,您必须使用包含和合并复制每个活动的代码,但这不是您想要查看的问题。如果您已经有 2 个基本活动,那么对于抽屉可见性来说是完美的。使用第一种方法,您将拥有 2 种不同的根布局,其中包含从代码中扩展的自定义活动布局。关于你的记忆疑问,这只是一个不同的代码组织,如果代码写得好,它不会影响性能
最近更新 更多