これで、プレビュー SDK と、ActionBar や Fragments などのきちんとした新しいものを見てきました。これらを利用するには、多くのメソッド呼び出しを行うことが避けられないので、アプリの 1 つのバージョンを維持するための戦略はありますか? 現在、私のアプリは 1.5 ~ 2.3 をターゲットにしています。
5 に答える
同じフラグメントAPIが、古いバージョンのAndroidで使用する静的ライブラリとして利用できるようになりました。Android1.6と互換性があります。
さまざまな新しいAPIがアプリで利用できるかどうかを確認するために使用できるいくつかのトリックがあります。一般的に言えば、2つの代替アクティビティセットを作成することをお勧めします。1つは新しいAPI(ActionBar、Animatorsなど)を使用し、もう1つは使用しないセットです。
次のコードは、リフレクションと例外キャッチを使用してフラグメントAPIの可用性を判断する方法と、バージョンチェックを使用して他のHoneycombAPIが利用可能かどうかを確認する方法を示しています。
private static boolean shinyNewAPIsSupported = android.os.Build.VERSION.SDK_INT > 10;
private static boolean fragmentsSupported = false;
private static void checkFragmentsSupported() throws NoClassDefFoundError {
fragmentsSupported = android.app.Fragment.class != null;
}
static {
try {
checkFragmentsSupported();
} catch (NoClassDefFoundError e) {
fragmentsSupported = false;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent startActivityIntent = null;
if (!shinyNewAPIsSupported)
startActivityIntent = new Intent(this, MainNonActionBarActivity.class);
else
startActivityIntent = new Intent(this, MainActionActivity.class);
startActivity(startActivityIntent);
finish();
}
一般的に、同じレイアウト定義を使用できます。フラグメントが利用可能な場合は、各レイアウトを異なるフラグメント内で膨らませます。そうでない場合は、<include>
タグを使用して、それらのいくつかをより複雑なアクティビティレイアウトに埋め込むことをお勧めします。
Honeycombでの下位互換性をサポートするコードの記述方法の詳細については、http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.htmlを参照してください。
都合のよいことに、Google の Dianne Hackborne が、まさにこのトピックを取り上げたブログ エントリを投稿しました。Google は、静的ライブラリを提供すると述べているため、古いバージョンの Android でもフラグメントを使用できるようになります。
下位互換性に関するReto Meier の記事、特に「欠落しているクラスの処理」というセクションが役立つかもしれません。
私はまだ Honeycomb SDK を自分で見ていませんが、あなたと同じように、古いデバイスとの互換性を損なうことなく、新しい機能を簡単かつ手間をかけずに使用できることを願っています.
Official Android sample that will help you achieve ActionBar from 1.6 to 4.x
さて、グーグルはハニカムがタブレット専用になると発表したばかりです:http://www.pcmag.com/article2/0,2817,2379271,00.asp
そのため、デバイスがモバイル専用である場合、これは問題にならないことさえあります.