这很奇怪,但在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”)
结果如下:
三星Galaxy S 3(Android 4.1.2)(工作正常)
索尼爱立信Xperia Arc S(Android 4.0.4)(很奇怪!)
正如您所看到的,代码在Android 4.1.2上正常运行。并且在Android 4.0.4上没有设置左右边距,但设置了上边距。为什么要顶?
我在仿真器上测试过。所有平台&gt; = Android 4都可以。在Android 2.3上,根本没有设置边距,甚至是上边距。
有谁知道如何处理它?如何更改代码中的保证金,以便它可以在所有平台上运行?
答案 0 :(得分:2)
索尼爱立信Xperia Arc S(Android 4.0.4) 索尼LT26ii(Android 4.0.4) 两者都不起作用 我别无选择,只能将其替换为RelativeLayout
答案 1 :(得分:1)
我遇到了同样的问题,我的解决方案是:创建一个新的LayoutParams而不是旧的。
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(WIDTH, HEIGHT, Gravity.TOP);
params.setMargins(50,50,50,50);
findViewById(R.id.myView).setLayoutParams(params);
}
宽度和高度:您还可以设置android.widget.FrameLayout.LayoutParams.MATCH_PARENT或android.widget.FrameLayout.LayoutParams.WRAP_CONTENT
希望它可以提供帮助。
答案 2 :(得分:0)
当您设置边距时,请
params.leftMargin = 50;
params.rightMargin = 50;
params.topMargin = 50;
params.bottomMargin = 50;
它使用不是dp的像素,这可以解释为什么它在不同的设备上看起来不同尝试将像素转换为像这样的dp