2016-11-21 109 views
0

我想解决的问题是,如果android有类似于ASP.Net中的masterpages,或者流星的IronRouter中的{{> yield}}模板。Android模板类似ASP.net Masterpages的东西?

本质上我想要的是能够定义一个模板并指定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开发人员的新手,并且正在制定最佳做法。我环顾四周,但无法找到答案。

回答

0

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

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

activity_main.xml中

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

里面做的containerFrameLayoutFragment操作(添加,替换,删除)使用下面的代码。

// 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,你可以anduse的include标签创建xml文件以包括此布局。

例如,

创建一个通用的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

希望你明白这个主意。祝你好运:)

+0

感谢您的反应,我非常了解这些代码中的方法,我真的在寻找一个XML答案。你说现在还没有办法,所以我想这就是答案。 – Shane

相关问题