2011-05-02 140 views
1

我的屏幕上有一些彈出窗口,需要的東西不那麼常見。查看另一個視圖

我將帶有Header + Content + Footer的彈出窗口布局爲LinearLayout。但我需要一個小箭頭才能顯示在我的組件上。

當彈出窗口位於錨點上方並且箭頭向下時,我使用下面的代碼來繪製它。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/content" android:orientation="vertical" 
android:layout_width="wrap_content" android:layout_height="wrap_content"> 

<LinearLayout android:id="@+id/header" android:background="@drawable/background_header" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
</LinearLayout> 

<HorizontalScrollView android:background="@drawable/background" 
    android:layout_width="wrap_content" android:layout_height="match_parent" 
    android:scrollbars="none"> 

</HorizontalScrollView> 

<ImageView android:id="@+id/arrow_down" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:layout_marginTop="-3dip" 
    android:src="@drawable/quickcontact_arrow_down" /> 
</LinearLayout> 

在運行時,我能夠把箭頭正好與下面的代碼錨以上。

ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) mArrowDown 
      .getLayoutParams(); 
    param.leftMargin = root.getMeasuredWidth() 
      - (screenWidth - anchor.getLeft()); 

它顯示正確。

現在我需要做同樣的事情,但箭頭需要顯示在上方。 我的問題是箭頭需要在另一個視圖上重疊一點(導致背景色匹配它們),所以這就是爲什麼它需要在後面繪製。

我試着用FrameLayout讓「內容」有一些topMargin,但它不工作。

我知道這可以用AbsoluteLayout來完成,但我不惜一切代價避免它。

編輯:

以下Josh答案,我寫了下面的代碼。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" android:layout_height="wrap_content"> 
<LinearLayout android:id="@+id/content" 
    android:orientation="vertical" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:fadingEdgeLength="0dip"> 

    <RelativeLayout android:id="@+id/header" 
     android:background="@drawable/background_header" android:orientation="horizontal" 
     android:layout_width="match_parent" android:layout_height="wrap_content"> 
    </RelativeLayout> 

    <HorizontalScrollView android:background="@drawable/background" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:scrollbars="none"> 
    </HorizontalScrollView> 
</LinearLayout> 
<ImageView android:id="@+id/arrow_up" android:layout_above="@id/content" 
    android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:src="@drawable/quickcontact_arrow_up" /> 
</RelativeLayout> 

但我不知道爲什麼,箭頭現在不顯示。

回答

4

我不會假裝讀取了所有的xml。不過,我認爲你想要的是RelativeLayout。您應該可以使用這種技術將任何小箭頭放在任何你喜歡的地方,相對於包含它的RelativeLayout的邊界。

例如,如果您將所有內容都包含在單個RelativeLayout中,然後添加一個Button作爲第二個項目,則可以爲按鈕屬性(如alignParentRight = true和layout_marginRight = 10dp)放置按鈕10dp從屏幕的右邊緣開始,在任何視圖的ON TOP上都已經存在。

+0

我知道,這是一個很強烈的代碼。我要測試你的解決方案。 – 2011-05-02 15:40:47

+0

指出@Josh,我同意你的看法,'RelativeLayout'肯定能解決問題。 +1爲緊湊desc。的解決方案。 – rekaszeru 2011-05-02 15:47:35

+0

好吧,我試着按照你的解決方案,但箭頭現在不出現。我添加了代碼,我在我的問題上嘗試。 – 2011-05-02 15:57:02

相關問題