我看到帖子说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更改为FILL_PARENT时,按钮会被拉伸以占据整个屏幕(这很有意义)。
你怎么把它画在屏幕上的其他地方,不管还有什么?
一如既往,非常感激。
[编辑] 看来我的问题并不完全清楚(给出答案)所以......
在上面的代码中,目的是创建一个按钮,将其传递给布局并让它在屏幕上以100,100绘制。
我知道这可能意味着不同设备上有不同的东西。我很好。我只需要一种方法,以编程方式,并在运行时,将项目放在SPECIFIC位置。我不想依靠引力(或热力学定律)。我只想指定一个位置并在那里显示元素:)
答案 0 :(得分:4)
正如许多人所指出的那样,在屏幕上的绝对像素位置设置按钮是一个非常糟糕的主意,并且永远不会在所有可用的Android手机上工作。我确信有更好的方法来实现你想要的布局。
但是,要回答问题:在运行时定位它可以使用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);
答案 1 :(得分:1)
有关不同可用布局的详细说明,请访问: http://mobiforge.com/designing/story/understanding-user-interface-android-part-1-layouts
因为我没有从你的描述中完全理解你想要完成什么(你想覆盖什么东西吗?)也许那里的视觉例子可以帮助你理解布局如何工作以及如何在它们上面定位东西。
答案 2 :(得分:0)
您对布局的最终目标是什么?如果您只需要一个按钮 - 比如说,在屏幕的中央,您可以使用以下内容进行布局:
<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设备上,屏幕上可能不到四分之一。