2015-04-27 13 views
7

Üç fragmanım var, ilk ikisi ekranın% 80'ini dolduran ve kalan sonuncusuyla (bu hiç bir zaman boyut olarak değişmeyecek). Bir parçadaki kullanıcıdan (odaklama) sonra, parçayı yeniden boyutlandırmak istiyorum, böylece ekranın% 70'ini doldurur (diğer% 10'unu diğerine bırakır). Dinamically bir parçanın ağırlığını değiştirmek mümkündürEkrandaki iki parçayı odağa göre nasıl yeniden boyutlandırabilirim?

enter image description here

: Böyle mi? Ya da bunu başarmanın daha iyi bir yolu var mı?

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <FrameLayout android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:weightSum="1.0"> 

      <FrameLayout android:id="@+id/containerParent" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_weight=".8"> 

       <LinearLayout 
        android:id="@+id/MainLinear" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical" 
        android:weightSum="1.0"> 

        <FrameLayout android:id="@+id/fragment1" 
         android:layout_width="fill_parent" 
         android:layout_height="0dp" 
         android:layout_weight=".5"/> 

        <FrameLayout android:id="@+id/fragment2" 
         android:layout_width="fill_parent" 
         android:layout_height="0dp" 
         android:layout_weight=".5"/> 

       </LinearLayout> 

      </FrameLayout> 


      <FrameLayout android:id="@+id/fragment3" 
       android:layout_width="fill_parent" 
       android:layout_height="0dp" 
       android:layout_weight=".2"/> 


     </LinearLayout> 

    </FrameLayout> 


</android.support.v4.widget.DrawerLayout> 

cevap

2

Bir şey gibi olmalıdır:

Bu

ben XML şu an sahip kodudur

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
         LayoutParams.MATCH_PARENT, 
         LayoutParams.MATCH_PARENT, WEIGTH_HERE); 

WEIGHT_HERE (dökme gerekebilir) bir şamandıra olduğunu varsayarsak.

(bunu yapmak için iyi bir yol olmadığını bilmiyorum ama o istediğini yapmalıdır)

Ve bir düğme veya bir şey ile bu kullanmak istiyorsanız sadece olmadan aynı şeyi

Button b = new Button(this); 
param.weight= (float) 0.5 // 0.5f 
b.setLayoutParams(param); 

ancak bu yöntem, muhafaza her şeyi istiyorsanız sadece aynı şeyi ancak yeni bir düzen oluşturmak kalmamak, onu alarak mevcut bir düzenleme, yeni bir Düzen paramater yaratacak: AĞIRLIK parametreler ve eklemek

LinearLayout.LayoutParams mLay = 
(LinearLayout.LayoutParams)myLay.getLayoutParams(); 
mLay.weight = (float) WEIGTH // WEIGHTf 
+1

Cevabınız için teşekkür ederim, ama aslında parçanın hedef noktaya doğru hareket etmesini (bir animasyon gibi) hemen yeniden konumlandırmasını istemiyorum. Mümkün mü? – Galbix

+1

Evet ve, sadece ithal etmek gerçekten basit ilgisi var ' android.transition.TransitionManager' Ve bunu yazmak: ' Transition.beginDelayedTransition (mLay); ' Bu bir geçiş (varsayılan geçişi) başlayacak nasıl görüneceğini Uygulamayı başlattığınızda Düzeninizdir ve daha sonra, eylemi tamamladığınızda düzeniniz nasıl olur ve bu yalnızca 2 adım arasında bir geçiş ekleyecektir. Ancak, mLay'in LayoutParams adlı bir Layout olması gerekmez. Ur düzeni aşağıdakiyle alabilirsiniz: 'mLay = (ViewGroup) findViewById (LayoutID); ' – Nico

İlgili konular