3

私の質問は、Androidプラットフォームのさまざまな画面密度にさまざまなレイアウトを使用することと関係があります。

4つのmain.xmlファイル(それぞれが対応する画面密度のそれぞれのフォルダーにあるldpi、mdpi、hdpi、およびxhdpi)があり、それらがすべて最初から同一であるとしましょう。しかし、ldpiレイアウトのUI要素の一部を削除したいとします。ldpi電話のldpiレイアウトでnullポインター例外を見つけようとするときに、Java側で処理してnullポインター例外を回避するにはどうすればよいですか?findviewbyidがnullを返すかどうかを確認して、そこから先に進む必要がありますか?

アプリ内で物事を均一に保つことになっていることは承知していますが、便利であるが不要なUI要素を削除する方が理にかなっているように思われる場合もあります。私はこれらの新しい電話に余分な不動産を持っているのが大好きですが、ldpiレイアウトを作成するときは、何かを取り除くためだけに見栄えが良くなるときに、そこにすべてを詰め込むのではなく、それが理にかなっているなら!

4

3 に答える 3

2

良い質問です。ヌルチェックは解決策の1つです。別の解決策は、画面のプロパティを確認することです。この例を見てください:

public static boolean isTabletPC(Context context) {
        boolean isHoneycomb = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
        boolean hasLargeScreen = (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
                >= Configuration.SCREENLAYOUT_SIZE_LARGE;
        return isHoneycomb & hasLargeScreen;
    }
于 2012-06-06T07:41:53.173 に答える
0

これは、オプションの要素を処理するのと同じ方法で処理されます。それが存在するかどうか(nullではない)を確認し、それに応じて処理します。が存在しない場合はViewnull findViewByIdを返しView、ブロック内でさらに操作if(null != view){}できます。グループ化できるオプションの要素が複数ある場合は、インスタンス変数を使用できます。

HoneycombGalleryデモは、レイアウトを使用してデバイスのプロパティを検出する方法のアイデアを提供します(デモでは、フラグメントに対して実行され、任意のビューに適用できます)

于 2012-06-06T07:44:45.357 に答える
0

api lvl 11から、おそらくそのためにフラグメントを使用したいと思うでしょう。このように、Javaコードは常にそこに確実に存在するビューを処理し、レイアウトは独自のビジネスを処理する特定のフラグメントを表示する(または表示しない)ことができます。

使用している画面の種類を確認したり、特定のビューが画面に表示されているかどうかを確認したりして、コードを散らかすことはお勧めしません。

リンク先のページの図1を見ると、私が何を意味するのかを明確に示しています。

さまざまなデバイス上のフラグメント

于 2012-06-06T07:51:53.157 に答える