3

別のapkからレイアウトxmlファイルをロードできるかどうか疑問に思っています. 別のアプリケーション リソースにアクセスする方法は知っていますが、可能であれば xml をロードする方法がわかりません。

レイアウト インフレータを使用してそのレイアウトをビューとして設定したい場合、xml を解析する必要がありますか?

これらの手順のようなもの...

  1. XmlPullParser.setInput を使用して XML ファイルを「ロード」します。
  2. それを AttributeSet に変換します
  3. この AttributeSet からビューを作成します
  4. アクティビティで setContentView(View) を使用します

私は何を求めていると思いますか、これは可能ですか?私が言ったように、私はリソースにアクセスする方法を知っています。しかし、レイアウト xml にアクセスするにはどうすればよいでしょうか。

ありがとう!

4

1 に答える 1

3

なんとかレイアウトを取得し、viewflipper に追加しましたが、空白として読み込まれます。

Resources packageResources;
Context packageContext;
try
{   
    packageResources = pm.getResourcesForApplication(packageName);
    packageContext = this.createPackageContext(packageName,  Context.CONTEXT_INCLUDE_CODE + Context.CONTEXT_IGNORE_SECURITY);                
}
catch(NameNotFoundException excep)
{
    // the package does not exist. move on to see if another exists.
}

Class layoutClass;
try
{
   // using reflection to get the layout class inside the R class of the package
   layoutClass = packageContext.getClassLoader().loadClass(packageName + ".R$layout");
}
catch (ClassNotFoundException excep1)
{
   // Less chances that class won't be there.
}

for( Field layoutID : layoutClass.getFields() )
{
   try
   {
       int id = layoutID.getInt(layoutClass);
       XmlResourceParser xmlResourceLayout = packageResources.getLayout(id);

       View v = new View(this, Xml.asAttributeSet(xmlResourceLayout));

       this.viewFlipper.addView(v);                 
    }
    catch (Exception excep)
    {
        continue;
    }
}

エラーは発生せず、デバッグしてチェックしました。レイアウト ID は正しいです。ただし、私の viewFlipper では空白です。私が見つけることができる警告やエラーはありません。

最後に解決策を得ました...以下に投稿しました、

別の apk からリソース (レイアウト) を動的に読み込む

于 2012-11-04T12:29:37.323 に答える