2016-04-23 74 views
2

所以我有一個LinearLayout有兩個視圖,我正在爲每個視圖設置權​​重。用LinearLayout和重量改變能見度

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/main_layout1" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:animateLayoutChanges="true" 
        android:gravity="center" 

        android:orientation="horizontal"> 

        <com.sorted.view.SorteddTextView 
         android:id="@+id/percent1" 
         android:layout_width="0dp" 
         android:layout_height="wrap_content" 
         android:layout_gravity="center" 
         android:layout_marginLeft="@dimen/normal" 
         android:layout_marginRight="@dimen/small" 
         android:layout_weight="2" 
         android:background="@color/sky_blue" 
         android:gravity="center" 

         android:text="0%" 
         android:textColor="@color/font_color" 
         android:textSize="@dimen/font_size_large" 
         android:visibility="invisible" /> 

        <FrameLayout 
         android:id="@+id/frame1" 
         android:layout_width="0dp" 
         android:layout_height="wrap_content" 
         android:layout_weight="8"> 
         ...... 
         ...... 
         </FrameLayout> 
</LinearLayout> 

現在,我首先將活動的可見性設置爲GONE。然後在某個按鈕上按下,我將可見性設置爲VISIBLE,但我無法看到視圖。 但是當能見度是INVISIBLE,然後如果我將其更改爲VISIBLE其工作正常。

我認爲是LinearLayout無法調整其視圖(以及我不知道)。

+0

什麼問題? –

+0

總之無法可見不工作。不可見可見工作良好的視圖 –

回答

0

如果您嘗試放置TableRow?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main_layout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:animateLayoutChanges="true" 
    android:gravity="center" 

    android:orientation="horizontal"> 

    <TableRow 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="2"> 

     <com.sorted.view.SorteddTextView 
      android:id="@+id/percent1" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center"     
      android:gravity="center" 
      android:text="0%" 
      android:visibility="invisible" /> 
    </TableRow> 

    <TableRow 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="8"> 

     <FrameLayout 
      android:id="@+id/frame1" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      > 

     </FrameLayout> 
    </TableRow> 
</LinearLayout> 
1

您應該添加android:weightSum到父LinearLayout

<LinearLayout  ... 
         android:id="@+id/main_layout1" 
         android:weightSum="10" 
         > 

         <com.sorted.view.SorteddTextView 
          android:id="@+id/percent1" 
          android:layout_weight="2" 
          /> 

         <FrameLayout 
          android:layout_weight="8"> 
         ... 
         </FrameLayout> 
    </LinearLayout> 

VISIBLE enter image description here INVISIBLE enter image description here GONE enter image description here

我還設置知名度,它提供了一個佈局相同,因爲我在XML設置

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     Button btn1 = (Button)findViewById(R.id.btn1); 
     Button btn2 = (Button)findViewById(R.id.btn2); 

     btn1.setVisibility(View.VISIBLE); 
     btn2.setVisibility(View.VISIBLE); 

//  btn1.setVisibility(View.VISIBLE); 
//  btn2.setVisibility(View.GONE); 

//  btn1.setVisibility(View.VISIBLE); 
//  btn2.setVisibility(View.INVISIBLE); 
    } 
+0

已經試過了。它只是讓FrameLayout處於中心位置。 –

+0

當SorteddTextView不可見時,它的woking很好。 GONE –

+0

@SonuRaj有問題我不確定你爲什麼那麼做,但我曾經創建一個演示,它工作 –

0

這是因爲當你第viewVisibility GONE,它隱藏像它應該,並且該空間被其他view調整其在LinearLayout內。這意味着所有可用空間現在被第二個view佔用。現在,當您再次創建第一個viewvisible時,您看不到它,因爲它已被佔用整個空間的另一個視圖重疊,因此需要將weightSum分配給LinearLayout這將始終確保出weight=10,2是第一個view和其餘8是第二個view總是。希望能幫助到你。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/main_layout1" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:animateLayoutChanges="true" 
       android:gravity="center" android:weightSum="10" 
       android:orientation="horizontal">