2012-01-02 85 views
5

我想創建一個界面,其中兩個或更多的按鈕將顯示給用戶,如果點擊一個按鈕,一些佈局將顯示給他。爲此,我正在使用SlidingDrawerAndroid layout_width&layout_height,它是如何工作的?

嗯,我很困惑layout_width & layout_height屬性

如果我設置像下面這樣的屬性,屏幕上只顯示「手柄1」。

android:layout_width="fill_parent" android:layout_height="wrap_content" 

老實說,我沒有足夠的關於這兩個屬性的知識。 有人可以分享他的知識嗎?

main.xml中:

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

    <SlidingDrawer android:id="@+id/slidingDrawer1" 
      android:layout_width="fill_parent" android:layout_height="wrap_content" 
      android:handle="@+id/handle1" 
      android:content="@+id/content1"> 
       <Button android:text="Handle 1" android:layout_height="wrap_content" 
         android:layout_width="fill_parent" android:id="@+id/handle1"></Button> 
       <LinearLayout android:id="@+id/content1" 
         android:layout_width="fill_parent" android:layout_height="wrap_content" 
         android:orientation="vertical" android:gravity="center" 
         android:background="#FF444444"> 
         <Button android:text="Handle 1 Item 1" android:layout_height="wrap_content" 
           android:layout_width="wrap_content" android:id="@+id/item1"></Button> 
       </LinearLayout> 
    </SlidingDrawer> 

    <SlidingDrawer android:id="@+id/slidingDrawer2" 
      android:layout_width="fill_parent" android:layout_height="wrap_content" 
      android:handle="@+id/handle2" 
      android:content="@+id/content2"> 
       <Button android:text="Handle 2" android:layout_height="wrap_content" 
         android:layout_width="fill_parent" android:id="@+id/handle2"></Button> 
       <LinearLayout android:id="@+id/content2" 
         android:layout_width="fill_parent" android:layout_height="wrap_content" 
         android:orientation="vertical" android:gravity="center" 
         android:background="#FF444444"> 
         <Button android:text="Handle 2 Item 1" android:layout_height="wrap_content" 
           android:layout_width="wrap_content" android:id="@+id/item2"></Button> 
       </LinearLayout> 
    </SlidingDrawer>  
</LinearLayout> 
+5

你檢查[文件](HTTP:// developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#FILL_PARENT)?這非常清楚imho。 – 2012-01-02 08:13:18

+1

好問題。幾個月前,當我第一次開始時,我對此感到困惑。給它幾天,你會得到它的掛鉤。 – Reid 2012-01-02 08:22:09

回答

5

視圖的layout_widthlayout_height屬性旨在由其父容器一起使用。有些容器忽略了其中一個或兩個;最尊敬他們。你需要查閱容器的文檔(在你的情況下,SlidingDrawer)以瞭解如何使用這些值。

你不顯示完整的main.xml,所以很難說出錯的是什麼。如果您發佈了錯誤圖片,這也會有所幫助。

編輯

看到您完整的佈局後,我認爲這裏的基本問題是,你正在使用的LinearLayout包含了SlidingDrawers。作爲docs for SlidingDrawer的說明,它們需要位於FrameLayout或RelativeLayout(實際上是允許多個視圖相互重疊的任何容器)。

另一種可能性是第二個SlidingDrawer直接放置在第一個SliderDrawer的下面。嘗試改變第二個按鈕的大小(例如,使文本更長),並查看它是否在按鈕1的任一側上出現。

+0

我已經提供了完整的main.xml,請參閱我的問題。 – 2012-01-02 08:57:16

+0

@YaqubAhmad - 我更新了我的答案。 – 2012-01-02 16:43:24

+0

非常感謝。我來檢查一下。 – 2012-01-02 16:52:46

4

fill_parent = match_parent,並且它表示它需要寬度或高度「父」容器

WRAP_CONTENT的財產也被指定爲)表示高度或寬度發生在「兒童」

你想用的,而不是使用match_parent或WRAP_CONTENT權的高度或寬度典型。

當你使用重量時,你想將寬度設置爲0dp。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/main" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 

    <LinearLayout 
    android:id="@+id/lowerLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="1.0" > 
      <LinearLayout 
      android:id="@+id/headerLayout" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_weight=".7" > 
       <Button 
        android:id="@+id/previousMonthButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Previous" /> 

       <TextView 
        android:id="@+id/monthName" 
        android:layout_width="0dip" 
        android:layout_height="wrap_content" 
        android:text="Large Text" 
        android:layout_weight="1" 
        android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_horizontal" /> 

       <Button 
        android:id="@+id/nextMonthButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Next" /> 

      </LinearLayout> 

      <LinearLayout 
      android:id="@+id/lowerLayout3" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_weight=".3" > 

       <Button 
        android:id="@+id/addEvent" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 

      </LinearLayout> 

    </LinearLayout> 
    <LinearLayout 
    android:id="@+id/lowerLayout2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="1.0" > 

     <LinearLayout 
      android:id="@+id/monthView" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:layout_weight=".7" > 

     </LinearLayout> 

     <ListView 
      android:id="@+id/listView1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight=".3" > 
     </ListView> 
    </LinearLayout> 

</LinearLayout> 
+0

我知道這一點,但看看我提供的XML,爲什麼它只顯示「手柄1」,如果應用上述規則,它應該同時顯示「手柄1」和「手柄2」。 – 2012-01-02 08:26:15

+0

您正在填充父項兩次。嘗試使用重量而不是將佈局寬度設置爲fill_parent。另請注意,fill_parent已棄用;改用match_parent。我編輯了我的答案,以便我可以向您展示一個例子。 – Reid 2012-01-02 08:29:28

0

我想你想添加2滑動抽屜。

SlidingDrawer的大小定義了一旦滑出後內容將佔用多少空間,因此SlidingDrawer通常應該使用match_parent作爲它的兩個維度,在這種情況下一個重疊另一個,所以您看不到處理程序2。

如果您設置第一個SlidingDrawer的可見性「消失」,您可以看到另一個。

更新

嗨,

請試試這個代碼,它可以幫助你

<?xml version="1.0" encoding="utf-8"?> 

<SlidingDrawer 
    android:id="@+id/slidingDrawer1" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="1" 
    android:content="@+id/content1" 
    android:handle="@+id/handle1" > 

    <Button 
     android:id="@+id/handle1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Handle 1" > 
    </Button> 

    <LinearLayout 
     android:id="@+id/content1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#FF444444" 
     android:gravity="center" 
     android:orientation="vertical" > 

     <Button 
      android:id="@+id/item1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Handle 1 Item 1" > 
     </Button> 
    </LinearLayout> 
</SlidingDrawer> 
+0

是的,我想添加多個滑動抽屜,從我的問題中清楚。如果我將可見度設置爲消失,那麼第一個滑動抽屜將變得不可見。 – 2012-01-02 10:50:07

+0

@YaqubAhmad檢查更新的帖子... – loks 2012-01-02 11:18:46

相關問題