2016-11-21 114 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

相關問題