6

サーバーから xml レイアウトを動的にロードする必要があります。LayoutInflater には、XmlPullParser を使用するインフレート メソッドがあります。私はそれを試しましたが、うまくいきません。

Android ソース コードを調べると、これらのインフレート メソッドが XmlResourceParser で呼び出されていることがわかります。Android が使用する実装は XmlBlock.Parser ですが、これはパブリック API ではありません。

使用できる XmlResourceParser パブリック実装はありますか?

4

4 に答える 4

4

Android ドキュメントXmlPullParserで説明されている従来のようなものを使用できます。

InputStream yourRemoteLayout = ...;
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(yourRemoteLayout, "someEncoding");
AttributeSet attributes = Xml.asAttributeSet(parser);

詳細については、 XmlPullParserのドキュメントで説明されている内容を参照してください。


編集: LayoutInflater#inflate()ドキュメントから:

Important   For performance reasons, view inflation relies heavily on pre-processing of XML files that is done at build time. Therefore, it is not currently possible to use LayoutInflater with an XmlPullParser over a plain XML file at runtime.

私が推測しているのはLayoutInflater.Factory2、Android 自体が前処理されたリソースのみに依存している場合は、独自の実装を作成する必要があるということです。

于 2013-09-09T11:06:21.010 に答える
2

はい、今すぐ ItsNat Droid で可能です。

この要約を見てください:

https://groups.google.com/forum/#!topic/itsnat/13nl0P12J_s

まだ大規模な開発が行われていますが、最も重要な機能は既に実装されています。

于 2014-11-16T13:25:48.990 に答える
2

実際、xml レイアウトを動的にロードすることはできません。Android システムは XmlResourceParser を必要としません。Android UIシステムがリソースを膨張させると、パーサーをプライベート実装であるバイナリxmlソースパーサーに変換するだけです(クラス名を忘れました)。

1年前、私はこれを試し、何度も費やしました。だから、二度と私のように時間を無駄にしないでください。

于 2013-09-11T09:54:56.933 に答える