1

私は大学で、実行時に Android アプリケーションをカスタマイズするプロジェクトに取り組んでいます。

Android プロジェクトの \res\layout\ フォルダーではなく、外部 Web サーバーにあるレイアウト XML ファイルを含めることはできますか? この背後にあるアイデアは、アプリを再インストール/更新することなく、新しいフィールドを追加するなど、Web サーバー上の xml ファイルをカスタマイズする機会を与えることです。

次の例を使用して、私の考えを説明しようとします。

住所を保存して表示するアプリケーションを持っているとしましょう。すべてのアドレスはデータベースに保存されます。データベースに「名前」と「姓」のフィールドを取得し、住所を保存または表示するときにアプリに表示しました。

ここで、電子メール アドレスを入力できる 3 番目のフィールド「email」を追加したいと思います。

私の考えは、データベースにこのフィールドを作成し、Web サーバーにあるレイアウト xml ファイルに追加することです。そのため、アプリ内で xml ファイルを「リンク」することができ、アプリを更新した後に新しいフィールドが表示されます。

実行時に入力フォームをカスタマイズする方法についての情報を教えていただければ幸いです。インターネットでの私の調査はまったく役に立ちませんでした..

グリーツ

4

2 に答える 2

1

外部 XML ファイルを使用してレイアウトを動的に調整することはできません。

のドキュメントでは、次のLayoutInflater#inflate(XmlPullParser, ViewGroup)理由が説明されています。

重要 パフォーマンス上の理由から、ビューのインフレーションは、ビルド時に行われる XML ファイルの前処理に大きく依存しています。したがって、現時点では、実行時にプレーン XML ファイルに対して XmlPullParser で LayoutInflater を使用することはできません。

ただし、コードでレイアウトを動的に作成することもできます。たとえば、Android ランタイム レイアウト チュートリアルを参照してください。

そのため、レイアウト情報を保持するファイルをサーバーに配置し、アプリで取得して解析し、レイアウトを動的に作成できます。基本的に Android のLayoutInflater. 明らかに、フォーマットを必要な基本だけに単純化できますが、それでもまだ必要ではない多くの作業があります。

レイアウト情報が、フィールドの名前を持つ単なるプレーン テキスト ファイルであると仮定しましょう

name
surname
email

次に、それを行ごとに読み取り、次EditTextのような方法で単純な for each を作成できます

private View getDynamicLayout(ArrayList<String> lines) {
    LinearLayout ll = new LinearLayout(this);
    for (String line : lines) {
        EditText et = new EditText(this);
        // fill it with some text
        et.setText(line);
        ll.addView(ll);
    }
    return ll;
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ArrayList<String> layoutConfig = readConfigFromFile();
    View layout = getDynamicLayout(layoutConfig);
    setContentView(layout);
}

ただし、本当に必要でない限り、アプリを定期的に更新することをお勧めします。また、独自に情報を作成するよりも、前処理されたレイアウトを使用する方が高速です。

また、上記の例 (ファイルの読み取り) のように、UI スレッドで重いディスクやネットワーク アクセスを行わないように注意してください。これは、バックグラウンド タスクで実行する必要があります。

于 2012-11-21T15:11:14.417 に答える
0

どうもありがとうございました。私はこれを乗り越えようとします。

アプリを更新できないのは、私が話しているアプリが実際にはさまざまな企業で使用されている CRM システムだからです。全員が Google Play ストアから同じアプリをダウンロードする必要があります。

私の仕事の目標は、すべての企業が独自に入力フォームをカスタマイズできるようにすることです。そのため、多くの異なる入力フォーム (すべての企業にそれぞれ) が存在する可能性がありますが、すべて同じアプリを使用しています。

実行時にアプリからアクセスできるレイアウト情報を含むファイルを保存するサーバーについて考えました。

ところで、私はソフトウェア エンジニアではないので、コードを書く必要はありません。概念を抽象的な方法で説明するだけで済みます.. :)

于 2012-11-22T09:54:03.277 に答える