2011-04-27 70 views
0

我有一个允许用户动态构建布局的活动。它由一个LinearLayout,一个添加一个新的LinearLayout和一个按钮来保存的按钮组成。每次单击该按钮时,都会创建一个包含它自己的按钮的新LinearLayout。单击该新按钮并在该LinearLayout内创建TextView等。以编程方式构建xml布局文件

我希望用户能够保存和恢复其布局。所以我想我可以通过childviews运行,并编程建立一个XML布局文件,我后来setContentView(new.xml)。

我正在使用指南here将xml文件写入SD卡。基本上,当我为xml标签创建一个新的LinearLayout I setTag(“LinearLayout”),新的Button ... setTag(“Button”)等等。然后我运行以下for循环来创建xml。

for (int i = 2; i < mainLayout.getChildCount(); i++) { 
    serializer.startTag(null, mainLayout.getChildAt(i).getTag().toString()); 
    for (int b = 1; b <= findViewById(mainLayout.getChildAt(i)).getChildCount(); b++) { 
     serializer.startTag(null, findViewById(mainLayout.getChildAt(i)).getChildAt(b).getTag().toString()); 
     serializer.attribute(null, "android:text", findViewById(mainLayout.getChildAt(i)).getChildAt(b).getText().toString()); 
     serializer.endTag(null, findViewById(mainLayout.getChildAt(i)).getChildAt(b).getTag().toString()); 
    } 
    serializer.endTag(null, mainLayout.getChildAt(i).getTag().toString()); 
} 

如果你加1周的LinearLayout,并添加1周的TextView到的LinearLayout,它应该输出继电器:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> 
<LinearLayout> 
    <LinearLayout> 
     <TextView android:text="the text"></TextView> 
    </LinearLayout> 
</LinearLayout> 

这似乎不是最好的办法然而,可以这样做。我很好奇,如果有人知道这是否会实际工作,或者如果有更好的方法?

回答

1

存在于从xmlpullparser http://developer.android.com/reference/android/view/LayoutInflater.html#inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup)

视图通货膨胀在很大程度上依赖于是 在生成时进行的XML文件 预处理膨胀布局的方法。因此, 目前无法在运行时通过普通XML文件使用 LayoutInflater和XmlPullParser 。

所以当你写xml文件到存储器卡,它可以不通过 http://developer.android.com/reference/android/view/LayoutInflater.html#inflate(int, android.view.ViewGroup)

这需要被预加工和包装在APK xml文件膨胀。