これは奇妙ですが、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 では、トップ マージンも含め、マージンはまったく設定されません。
対処方法を知っている人はいますか?すべてのプラットフォームで動作するようにコードのマージンを変更する方法は?