5

これは奇妙ですが、Java コードで左マージンまたは右マージンを設定すると、一部のデバイス/プラットフォームでは機能しません。

これがコードです。単純な xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    >

    <View
        android:id="@+id/myView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="0dp"
        android:background="#00ff00" />

</FrameLayout>

ジャワ:

@Override
public void onConfigurationChanged (Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);

    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)findViewById(R.id.myView).getLayoutParams();
        params.leftMargin = 50;
        params.rightMargin = 50;
        params.topMargin = 50;
        params.bottomMargin = 50;
        findViewById(R.id.myView).requestLayout();
    }
}

したがって、FrameLayout 内に緑色のビューがあります。回転すると、ビューのマージンが変更されます。(私のアクティビティには android:configChanges="orientation|screenSize" があります)

結果は次のとおりです。

Samsung Galaxy S 3 (Android 4.1.2) (正常に動作)

ここに画像の説明を入力

ここに画像の説明を入力

Sony Ericsson Xperia Arc S (Android 4.0.4) (動作がおかしい!)

ここに画像の説明を入力

ここに画像の説明を入力

ご覧のとおり、コードは Android 4.1.2 で正しく動作します。また、Android 4.0.4 では、左右のマージンは設定されませんが、上部のマージンが設定されます。なぜトップ?

エミュレータでテストしました。すべてのプラットフォーム >= Android 4 は正常に動作します。Android 2.3 では、トップ マージンも含め、マージンはまったく設定されません。

対処方法を知っている人はいますか?すべてのプラットフォームで動作するようにコードのマージンを変更する方法は?

4

3 に答える 3

2

Sony Ericsson Xperia Arc S (Android 4.0.4) Sony LT26ii (Android 4.0.4) どちらも動かない RelativeLayout に置き換えるしかない

于 2013-12-17T01:44:33.730 に答える
0

このように余白を設定すると

 params.leftMargin = 50;
    params.rightMargin = 50;
    params.topMargin = 50;
    params.bottomMargin = 50;

dpではなくピクセルを使用しているため、デバイスによって異なるように見える理由を説明できます。このようにピクセルをdpに変換してみてください

ピクセルを dp に変換する

于 2013-08-29T22:47:29.623 に答える