Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的AbsoluteLayout的替代方案是什么?_Android - Fatal编程技术网

Android中的AbsoluteLayout的替代方案是什么?

Android中的AbsoluteLayout的替代方案是什么?,android,Android,我看到一些帖子说FrameLayout是另一种选择,我应该使用边距来定位东西(这让我觉得非常违反直觉,但没关系……如果它奏效,我就接受它)。然而,我无法让它工作,所以,我正在寻求帮助 这是我的密码 FrameLayout layout = new FrameLayout(this); layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

我看到一些帖子说FrameLayout是另一种选择,我应该使用边距来定位东西(这让我觉得非常违反直觉,但没关系……如果它奏效,我就接受它)。然而,我无法让它工作,所以,我正在寻求帮助

这是我的密码

    FrameLayout layout = new FrameLayout(this);
    layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

    Button btn = new Button(this);
    btn.setBackgroundResource(R.drawable.btn);

    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lp.setMargins(100,100,100,100);

    btn.setLayoutParams(lp);   //i've tried with and without this line, no change

    layout.addView(btn , lp);
无论我做什么,按钮都绘制为0,0。当我更改lp的LayoutParam以填充父对象时,按钮将被拉伸以占据整个屏幕(这是有意义的)

你如何让它在屏幕上的其他地方画画,而不管屏幕上还有什么

像往常一样,超级提前感谢

[编辑] 看来我的问题并不完全清楚(给出了答案),所以

在上面的代码中,目的是创建一个按钮,将其传递给布局,并使其在屏幕上以100100绘制


我知道这在不同的设备上可能意味着不同的事情。我同意。我只需要一种方式,通过编程,在运行时,将项目放置在特定位置。我不想依赖重力(或热力学定律)。我只想指定一个位置,让元素出现在那里:)

布局的最终目标是什么?如果您只需要一个按钮——比如说,在屏幕中央,您可以使用以下按钮进行布局:

<RelativeLayout
    android:xmlns="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    >
    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height = "wrap_content"
        android:text="@string/the_button_text"
        />
</RelativeLayout>


AbsoluteLayout是个坏主意,因为您需要支持大量的屏幕分辨率。一个屏幕上的100像素可能是一半,而在dpi较高的设备上,屏幕上的100像素可能不到四分之一

有关不同可用布局的详细说明,请访问


从你的描述中,我不完全理解你想要完成什么(你想覆盖内容吗?),也许这里的视觉示例可以帮助你理解布局是如何工作的,以及如何在布局上定位内容。

正如许多人指出的,在屏幕上设置一个绝对像素位置的按钮是一个非常糟糕的主意,而且在所有可用的安卓手机上都不起作用。我相信有更好的方法来实现你想要的布局

但是,要回答问题:要在运行时定位它,可以使用AbsoluteLayout.LayoutParms

AbsoluteLayout absoluteLayout = //get absolute layout

Button button = new Button();
AbsoluteLayout.LayoutParms params = absoluteLayout.generateDefaultLayoutParams();
params.x = 100;
params.y = 100;

absoluteLayout.addView(button, params);

我一次又一次地看到这个答案。。。我明白了。。。屏幕大小不一。但这非常令人沮丧。我不是在寻求解决我问题的替代方案。。。我在寻求解决办法!我不要按钮在中间。根据设计,我想把它放在一个特定的地方。我有一个图形设计,要求按钮位于特定的X和Y位置。我对屏幕大小的多样性很满意。我愿意使用AbsoluteLayout(我知道它已被弃用)。。。我只想得到答案:)如果你认为任何编程问题都只有一个答案,那么也许你应该做些别的事情。你的问题标题就是在寻求另一个答案。您希望它位于相对于屏幕左上角的特定x,y坐标中吗?是否希望它位于相对于布局中另一个对象的x、y坐标中?如果你真的下定决心要使用AbsoluteLayout,那就去吧,但这不是正确的方法。。。我的意思是,没有人回答真正的问题。基本上,答案总是“为什么不做点别的”。我很清楚有很多方法可以剥山羊的皮。。。我只是要求1,但我想剥一只山羊的皮,而不是给小猫挤奶。“我有一个图形设计,要求按钮位于特定的X和Y位置。”--然后修改设计。好的,你看到在链接中他们如何将FrameLayout和AbsoluteLayout描述为有一个android:Layoutx param?编译器无法识别layoutX或LAYOUX或与FRAMELLAYOUT或AbsoluteLayout关联的任何内容。所以,我试图做的只是在运行时将一个元素定位到一个特定的位置,我没有看到任何方法可以做到这一点。我尝试了你的代码,按钮位于左上角的(100100)。也许这是安卓系统更高版本中修复的一个bug。我刚刚发布了一个库,可能对这个案例感兴趣。github.com/ManuelPeinado/ImageLayout