安卓:设置左/右边距无效

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>

Java:

@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中有一个绿色视图。旋转时更改View的margin。(我的activity具有android:configChanges =“orientation | screenSize”)

以下是结果:

三星 Galaxy S3(Android 4.1.2)(正常工作)

enter image description here

enter image description here

Sony Ericsson Xperia Arc S(Android 4.0.4)(表现奇怪!)

enter image description here

enter image description here

如您所见,代码在Android 4.1.2上运行正常。 在Android 4.0.4上,左右边距未设置,但是顶部边距已设置。 为什么是顶部?

我已在模拟器上进行了测试。 所有Android 4及以上平台均可正常工作。 在Android 2.3上根本没有设置边距,甚至顶部边距也没有设置。

有谁知道如何解决它? 如何在代码中更改间距,以便在所有平台上都能正常工作?

3个回答

2

Sony Ericsson Xperia Arc S(Android 4.0.4) Sony LT26ii(Android 4.0.4) 两者都不起作用, 我别无选择,只能使用RelativeLayout进行替换。


0
我曾经遇到和你一样的问题,我的解决方案是:创建一个新的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

希望能有所帮助。


0

当您设置边距时,可以这样做

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

它使用像素而不是dp,这可能解释了为什么在不同的设备上看起来不同。尝试将您的像素转换为dp,如下所示:

将像素转换为dp


谢谢,但这并不重要。这与dp和px无关。问题在于顶部边距已设置(即使以像素为单位),而左边距根本没有设置。我想知道原因,并找出如何通过代码来解决的方法。 - Max Kachinkin
为什么不定义两个布局,一个用于水平方向,一个用于垂直方向,为什么要尝试在代码中完成呢? - user1634451
因为我不想重新创建我的布局。 - Max Kachinkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接