Android模板类似ASP.net Masterpages?

时间:2016-11-21 05:46:20

标签: android templates

如果android有类似于ASP.Net中的masterpages,或者{{>在meteor的IronRouter中使用yield}}模板。

基本上我想要的是能够定义模板并指定xml构造中的内容。

想象一下像控件这样的简单卡片,其中的内容是在设计时在xml中指定的。

也许将控件定义为:

<myCardControl>
  <layout>
    <text />
    <content />
    <button />
  </layout>
</myCardControl>

然后在其他布局中使用它,如组件:

<layout>
   <myCardControl>
      <image />
   </myCardControl>
   <myCardControl>
      <image />
   </myCardControl>
   <myCardControl>
      <layout>
         <text>...or other controls etc.
      </layout>
   </myCardControl>
</layout>

如果有人能够理解我的意思,你能否指出我正确的方向。我是Android开发人员的新手,并且正在研究最好的做事方式。我环顾四周但却找不到答案。

1 个答案:

答案 0 :(得分:0)

这些概念不像Android中的ASP.net Masterpages。但你可以创造这样的东西。

您可以创建一个Activity作为模板。所有内容(正在改变的部分)都在Fragment内。将此片段加载到Activity

activity_main.xml中

<LinearLayout>
    <common views />
    <FrameLayout
        android:id="@+id/container"
        .... />
</LinearLayout>

要在Fragment container内执行FrameLayout操作(添加,替换,删除),请使用以下代码。

// get fragment manager
FragmentManager fm = getFragmentManager();

// add
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.your_placehodler, new YourFragment());
// alternatively add it with a tag
// trx.add(R.id.your_placehodler, new YourFragment(), "detail");
ft.commit();

// replace
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.your_placehodler, new YourFragment());
ft.commit();

// remove
Fragment fragment = fm.findFragmentById(R.id.your_placehodler);
FragmentTransaction ft = fm.beginTransaction();
ft.remove(fragment);
ft.commit();

要在这些Fragment中重复元素,您可以创建xml文件并使用include标记来包含此布局。

例如,

创建一个通用的xml。

common.xml

<LinearLayout>
    <common views>
</LinearLayout>

您可以在代码中包含此布局,如下所示,

fragment1.xml

<LinearLayout>
    <include
        ..
        layout="@layout/common"/>
</LinearLayout>

fragment2.xml

<LinearLayout>
    <include
        ..
        layout="@layout/common"/>
</LinearLayout>

Fragment Tutorial
Include tag example

希望你能得到这个想法。祝你好运:)