使用XmlPullParser解析android XML布局文件
问题描述:
在不同的情况下,这个问题已经有很多问题,但是一天之后我找不到解决我的错误的答案。使用XmlPullParser解析android XML布局文件
我在res/layout
文件夹内有一个名为activity_single_touch.xml
的xml文件。 此文件用于添加按钮等视图,但我也希望能够将其“实时”编辑(用户可以在屏幕上绘制)。
继Android的引导,我想在我的主Java代码中使用XmlPullParser
像这样:
public class SingleTouchActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_single_touch);
XmlPullParser parser = getResources().getXml(R.xml.activity_single_touch);
AttributeSet attributes = Xml.asAttributeSet(parser);
setContentView(new SingleTouchEventView(this, attributes));
}
public class SingleTouchEventView extends View {
...
}
}
代码的其余部分使用OnDraw
和OnTouchEvent
根据用户的移动绘制路径,然后无效。
我现在得到的错误是“无法解析符号'xml'”。 我该如何解决这个问题?
PS: 事情我已经尝试(和失败): 使用
XmlPullParser parser =getResources().getXml(R.layout.activity_single_touch);
并得到 “预期的XML元素” 的错误,
我已经读了
this guide
these answeres
these as well
use of streams
use of context
moving the xml file to a different folder(could not move it)
this guide
当然搜索谷歌和一些*的问题和答案的和。
答
您可以使用getLayout
方法打开布局文件并解析它。这是你如何手动解析它。
试试这个,在你的代码
try {
XmlResourceParser parser = getResources().getLayout(R.layout.activity_single_touch);
int event = parser.getEventType();
do{
String tagName = parser.getName();
if(event == XmlPullParser.START_TAG){
Log.e("TagName", tagName);
}
event = parser.next();
} while (event != XmlPullParser.END_DOCUMENT);
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
用法,
public class SingleTouchActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
XmlResourceParser parser = getResources().getLayout(R.layout.activity_single_touch);
AttributeSet attributes = Xml.asAttributeSet(parser);
setContentView(new SingleTouchEventView(this, attributes));
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
public class SingleTouchEventView extends View {
}
}
我不知道你要我怎么用这个 - 我试图改变这一行: XmlPullParser解析器= getResources ().getXml(R.xml.activity_single_touch); 到你给我的代码块,它不起作用。 我也尝试将此行切换为: XmlResourceParser parser = getResources()。getLayout(R.layout.activity_single_touch); 并没有奏效。 我在做什么错? – yo1122
你的意思是什么不起作用? “TagName”是否未被打印? –
首先 - 它告诉我这一行: AttributeSet attributes = Xml.asAttributeSet(parser); “无法解析符号”解析器“”。我认为这是范围问题,所以我将代码的前几行更改为: XmlResourceParser解析器; 尝试解析器= getResources()。getLayout(R.layout。activity_main); ... 但是它说“变量”解析器可能没有被初始化“。 我该怎么办? 顺便说一句 - 为了确保我在正确的位置使用此代码,这是所有的OnCreate方法,而不是上面的评论中引用的行。 – yo1122