2010-09-10 99 views
3

我看到帖子說FrameLayout是另一種選擇,我應該使用邊距來定位事物(這讓我覺得很不直觀,但好吧......如果它有效,我會接受它)。但是,我無法使其工作,所以我正在尋求幫助。Android中的AbsoluteLayout的替代方法是什麼?

這裏是我的代碼

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。

我意識到這一事實,這可能意味着不同的設備上的不同的事情。我確定。我只需要一種方法,以編程方式,並在運行時,將物品放置在特定位置。我不想依靠重力(或熱力學定律)。我只想指定一個位置並讓元素出現在那裏:)

+0

我試了一下你的代碼,按鈕放在左上角的(100,100)處。也許這是一個在更高版本的android中修復的bug。 – hultqvist 2013-03-29 00:32:42

+0

我剛剛發佈了一個可能在這種情況下感興趣的庫。 github.com/ManuelPeinado/ImageLayout – Manuel 2013-04-18 06:37:14

回答

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); 
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設備上它可能會少於屏幕四分之一。

+3

我一次又一次看到這個答案......我明白了......屏幕大小不一。但這是非常令人沮喪的。我不是要求解決方案替代我的問題...我要求解決方案!我不想要中間的按鈕。考慮到設計,我希望它在特定的地方。我有一個圖形設計,它要求按鈕位於特定的X和Y位置。我很喜歡大量的屏幕尺寸。我願意使用AbsoluteLayout(我知道它已被棄用)...我只想回答:) – 2010-09-10 19:21:04

+3

如果您認爲對任何編程問題都有一個單一的答案,那麼也許您應該做其他的事情。 – Falmarri 2010-09-10 19:26:16

+1

你的問題題目是要求一個替代方案。你是否希望它在相對於屏幕左上角的特定x,y座標中?你是否希望它在相對於佈局中另一個對象的x,y座標中?如果您真的決定使用AbsoluteLayout,請繼續,但這不是正確的做法。 – kcoppock 2010-09-10 19:27:13

1

不同的可用佈局的一個很好的解釋,請 http://mobiforge.com/designing/story/understanding-user-interface-android-part-1-layouts

由於我沒有完全從你的描述你要完成的瞭解(你想覆蓋的東西?)也許是視覺的例子可以幫助您瞭解佈局如何工作以及如何定位佈局。

+0

好吧,你看看他們如何在FrameLayout和AbsoluteLayout中描述具有android:layout_x參數的鏈接?編譯器無法識別layoutX或layout_x或任何與FrameLayout或AbsoluteLayout相關的東西。所以,我想要做的只是在運行時將某個元素放置在特定位置,而我沒有辦法做到這一點。 – 2010-09-10 19:50:00

相關問題