2014-10-18 61 views
0

我使用的代碼從JawsWare - Overlay View創建一個視圖,奠定了一切。沒有活動的視圖 - 位置和佈局

這工作正常,但我未能適應給定的佈局,以滿足我的需求。

我想要的是:兩個階段。 第一階段:左上角的按鈕始終位於所有其他應用程序的上方。 當按下此按鈕時,我們進入第二階段:

該按鈕被兩個圖像取代,這兩個圖像將在距離頂部一定距離處水平對齊,再次浮在其他位置。

我不得不承認,我真的不明白的Android布點,但我已經試過了的RelativeLayoutImageView的擺弄,但它似乎馬車。 此外,我遇到了一個非常奇怪的行爲:即使圖像左上角只有大約200x200像素,幾乎整個屏幕都被視圖「封鎖」(它接收所有TouchEvents,即使應該有任何東西)。看起來,如果我使用邊距將佈局定位在屏幕中間,則可見按鈕左側和頂部的所有內容都將接收觸摸事件,並且不會讓它們傳遞到底層應用程序(即使沒有可見內容)。

任何想法爲什麼發生這種情況,以及如何規避這種情況?

第二:如何從早期實現兩種佈局?

編輯1:我的佈局。 (請記住,我只是複製這個,然後做了我認爲是正確的)

<?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" 
android:layout_margin="0dp" 
android:onClick="overlayTextClicked" 
android:padding="0dp" 
android:id="@+id/overlay_layout_id" 
> 

<ImageView 
    android:id="@+id/imageview_info" 
    android:layout_width="200px" 
    android:layout_height="200px" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:scaleType="fitXY" 
    android:src="@drawable/picture_010512233437384578" 
    android:contentDescription=""/> 

<TextView 
    android:id="@+id/textview_info" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:text="info" 
    android:textColor="#FFF" 
    android:orientation="vertical" 
    android:textAppearance="?android:attr/textAppearanceSmall" /> 

</RelativeLayout> 

後來我試圖設置RelativeLayouts重力頂部| CENTER_VERTICAL,頂部邊距爲200px。

+0

關閉我的頭頂,佈局在高度和寬度都設置爲「match_parent」,但圖像只有200x200,因此即使View本身很大,它也不會填滿整個屏幕。你需要發佈你的佈局。 – DeeV 2014-10-18 00:14:31

回答

1

我相信這裏發生的是你的TextView正在填滿整個屏幕。

wrap_content將視圖的大小與其內容綁定在一起。 match_parent填充了一個儘可能大的視圖(即容器無論大小如何)。

因此,在這種情況下,您的RelativeLayout沒有它所綁定的最大大小。你的TextView將嘗試儘可能大,所以它會填滿屏幕。同樣,RelativeLayout將炸燬到這個尺寸以包裹TextView

此外,RelativeLayout並沒有真正對Gravity做出響應。這很容易在LinearLayoutFrameLayout容器中使用,但RelativeLayout像「CENTER_IN_PARENT」這樣的關係規則將會覆蓋你設置的任何Gravity(如果你設置Gravity.RIGHT和「CENTER_IN_PARENT」,那麼我必須贏得勝利)。

+0

很好,所以這應該解決我的第一個問題 - 但是我怎樣才能在屏幕上自由定位視圖,而不是「偷」觸摸事件? 編輯:是的,我試過了,現在可以工作了。但是如果我在佈局上使用了marginTop,那麼它上面仍然不可觸摸 – 2014-10-18 00:42:30

+0

您不希望整個RelativeLayout接受觸摸事件。你想要一個小得多的孩子視圖來做到這一點。例如,將「onClick」屬性設置爲您的ImageView,點擊事件只會觸發您的ImageView(除非您在RelativeLayout上重寫onTouchEvent並返回「true」)。 – DeeV 2014-10-18 00:57:57

+0

一旦你這樣做了,你可以保持RelativeLayout來填滿你的整個屏幕。將孩子移到任何你想要的地方。 RelativeLayout仍然會接受觸摸事件,但不會被「消耗」,他們會傳遞到後面的Views。 – DeeV 2014-10-18 00:58:46