0

私はできるだけ正確にしようとします。アプリを作成しました。完全なコード自体は問題ではありません

public void onWindowFocusChanged(boolean hasFocus){
    super.onWindowFocusChanged(hasFocus);

    if(hasFocus){
        globalWidth = mainLayout.getWidth();
        refillData();
    }
}

それは私のデバイス(sgs2 DarkyROM hd2.1 androidバージョン4.0.3もsgs2の2.3バージョンベースのシステムでそれをチェックしました)、PilotX2.1を備えた別のsgs2、ASUS Transformer(android v4.2.1)および多くで動作します画面サイズが異なる他のデバイス。実行するデバイスによって外観が異なると言わざるを得ません(メインレイアウトを動的に構築するため、アプリが正しく実行されるかどうかは非常に注目に値します)。

しかし、一部のデバイスでは奇妙な動作をします。たとえば、Android バージョン 2.3.5 を実行している HTC (htc sense 2.1) では、何とか getWidth() 行で画面の半分または実際の幅を返します。または sgs2 4.2.1 android バージョンでも奇妙な結果が返されます。

Google とスタック オーバーフローで検索して、アプリに大きな影響を与える考慮すべき特定のシステムの違いがあるかどうかを確認しようとしましたが、何もありません。システムの開発者によって異なる方法で実装される可能性のあるデバイスの特定のハードウェアは使用しません。

私が考えていなかった問題は何ですか?カーネルが異なると、アプリの「問題のある」動作が発生する可能性がありますか? ROMの違いかと思いましたが、少なくとも6~8種類のROMを確認しましたが問題ありませんでした。

誰かがその主題に精通している、または似たようなものに出会った場合、私はウェブページへのリンクさえ喜んでいます. 本当にイライラしました。

4

1 に答える 1

0

View.makeMeasureSpecを使用して測定値を修正できるかもしれません

mainLayout.measure(
        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

int height = mainLayout.getMeasuredHeight();
int width = mainLayout.getMeasuredWidth();
于 2013-03-27T16:58:25.797 に答える