使用输入阅读器读取布局xml文件

时间:2019-01-12 21:08:48

标签: android xml android-studio layout xposed

我正在尝试读取布局XML文件。

String file="res/layout/activity_main.xml";
InputStream in=mCurrentActivity.getClass().getClassLoader().getResourceAsStream(file);
                InputStreamReader isr= new InputStreamReader(in);
                BufferedReader br = new BufferedReader(isr);
                while((line=br.readLine()) != null )
                {
                    XposedBridge.log(line);
                 }

这是我的代码,这是我对应的XML文件 我得到的输出: the output that I get:

因为这是我的任期项目,所以我需要尽快解决(还剩2天),所以我们将不胜感激。

所以这是我解决的方法: 我没有ID,所以首先我得到的ID是:

int layoutId =mCurrentActivity.getResources().getIdentifier("activity_main", "layout",mCurrentActivity.getPackageName());

然后:

XmlResourceParser s = mCurrentActivity.getResources().getLayout(layoutId);

感谢Mike M。

2 个答案:

答案 0 :(得分:0)

搜索为我带来了非常相似的问题here。我想,解决问题的主要思路是应该指定编码。

根据您的情况,尝试以这种方式更改代码:

#parent {
display: flex;
justify-content: center;
}
.child {
flex-grow: 1;
flex-basis: 0;
border: 3px solid #c4d1d4;
background: #ffffff;
margin: 0 20px 40px 20px;
}

String file="res/layout/activity_main.xml";
InputStream in=mCurrentActivity.getClass().getClassLoader().getResourceAsStream(file);
InputStreamReader isr= new InputStreamReader(in, "UTF-8");
BufferedReader br = new BufferedReader(isr);
while((line=br.readLine()) != null)
{
    XposedBridge.log(line);
}

或尝试使用UTF-8以外的其他编码变体。

我想这取决于您在.xml文件中设置的编码类型

示例:

String file="res/layout/activity_main.xml";
InputStream in=mCurrentActivity.getClass().getClassLoader().getResourceAsStream(file);
InputStreamReader isr= new InputStreamReader(in, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
while((line=br.readLine()) != null)
{
    XposedBridge.log(line);
}

答案 1 :(得分:0)

您尝试读取的XML文件不是纯XML bin二进制XML格式。因此,尝试通过公用Reader进行读取将无法正常工作。

您可以使用例如库AXML来加载此类二进制xml文件:

String file="res/layout/activity_main.xml";
InputStream in = mCurrentActivity.getClass().getClassLoader().getResourceAsStream(file));
Document doc = new CompressedXmlParser().parseDOM(in);