2011-07-23 14 views
102

boyutunu ayarlama Android uygulaması kapsamında bir düğme kümesi yapıyorum. Düğmeler iç içe geçmiş bir LinearLayouts setinin parçasıdır. Ağırlık kullanarak, kendiliğinden belirlenen LinearLayout öğesinin boyutuna göre kendini otomatik olarak yeniden boyutlandırma ayarına sahibim. Buradaki fikir, ekranın piksel sayımına ve yoğunluğuna bağlı olarak, içerdiği düzenin boyutunu bir dizi piksele ayarlamaktır; ve düğmenin bu değişikliğe göre kendini yeniden boyutlandırmasını sağlayın.Android: Nasıl bir Layout

Sorun şu durumda: Düzeni yeniden boyutlandırma.

Birkaç önerilen tekniği denedim ve hiçbiri çalışmaya yakın gelmiyor. İşte düğme kümesini oluşturur XML bir alt kümesidir:

<LinearLayout android:layout_height="104pt" android:id="@+id/numberPadLayout" android:orientation="horizontal" android:layout_width="104pt" 
    android:background="#a0a0a0" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
> 

    <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout1" android:orientation="vertical" android:layout_width="wrap_content"> 
     <Button android:text="1" android:id="@+id/button1" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="4" android:id="@+id/button4" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="7" android:id="@+id/button7" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="-" android:id="@+id/buttonDash" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
    </LinearLayout> 
    <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout2" android:orientation="vertical" android:layout_width="wrap_content"> 
     <Button android:text="2" android:id="@+id/button2" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="5" android:id="@+id/button5" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="8" android:id="@+id/button8" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="0" android:id="@+id/button0" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
    </LinearLayout> 

    <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout3" android:orientation="vertical" android:layout_width="wrap_content"> 
     <Button android:text="3" android:id="@+id/button3" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="6" android:id="@+id/button6" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="9" android:id="@+id/button9" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="." android:id="@+id/buttonDot" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
    </LinearLayout> 
    <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout4" android:orientation="vertical" android:layout_width="wrap_content"> 
     <Button android:text="/" android:id="@+id/buttonBack" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
     <Button android:text="\" android:id="@+id/buttonEnter" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> 
    </LinearLayout> 

</LinearLayout>  

iki soru vardır: 1) ı Java numberPadLayout erişmek nasıl. Ve bir kez görünümüne eriştiğimde, 2) yerleşimin yüksekliğini ve genişliğini nasıl değiştirebilirim.

Herhangi bir öneri takdir edilecektir.

cevap

294

Bu çalışması gerekir:

// Gets linearlayout 
LinearLayout layout = findViewById(R.id.numberPadLayout); 
// Gets the layout params that will allow you to resize the layout 
LayoutParams params = layout.getLayoutParams(); 
// Changes the height and width to the specified *pixels* 
params.height = 100; 
params.width = 100; 
layout.setLayoutParams(params); 

Eğer piksele dalış dönüştürmek istiyorsanız, bunu kullanın:

int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, <HEIGHT>, getResources().getDisplayMetrics()); 
+8

Teşekkür ederim, tam ihtiyacım olan buydu. Benim varsayımla, parametrelerin işe yaraması için düzeni tekrar uyguladığımın varsayımıyla yanlış anlaşıldım. – codingCat

+1

Diğer Görünümlerin hesaplanan değerlerine göre değiştirmeniz gerekiyorsa, bunu http://stackoverflow.com/a/8171014/9648 ile birleştirin. – JohnnyLambada

+1

Çalışmıyor. Düzenim genişliğim 2000'tir. 'Layout.getWidth()' i yazdırdığımda, 'params.width = 1000' –

44

benim örnek kod

wv = (WebView) findViewById(R.id.mywebview); 
wv.getLayoutParams().height = LayoutParams.MATCH_PARENT; // LayoutParams: android.view.ViewGroup.LayoutParams 
// wv.getLayoutParams().height = LayoutParams.WRAP_CONTENT; 
wv.requestLayout();//It is necesary to refresh the screen 
+0

WebView, cordova uygulamalarında kullandığınız gibi kokular kullanır, değil mi? –

2

Sen gerçek yüksekliği elde edebilirsiniz Bu kodla aranan düzen:

public int getLayoutSize() { 
// Get the layout id 
    final LinearLayout root = (LinearLayout) findViewById(R.id.mainroot); 
    final AtomicInteger layoutHeight = new AtomicInteger(); 

    root.post(new Runnable() { 
    public void run() { 
     Rect rect = new Rect(); 
     Window win = getWindow(); // Get the Window 
       win.getDecorView().getWindowVisibleDisplayFrame(rect); 

       // Get the height of Status Bar 
       int statusBarHeight = rect.top; 

       // Get the height occupied by the decoration contents 
       int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop(); 

       // Calculate titleBarHeight by deducting statusBarHeight from contentViewTop 
       int titleBarHeight = contentViewTop - statusBarHeight; 
       Log.i("MY", "titleHeight = " + titleBarHeight + " statusHeight = " + statusBarHeight + " contentViewTop = " + contentViewTop); 

       // By now we got the height of titleBar & statusBar 
       // Now lets get the screen size 
       DisplayMetrics metrics = new DisplayMetrics(); 
       getWindowManager().getDefaultDisplay().getMetrics(metrics); 
       int screenHeight = metrics.heightPixels; 
       int screenWidth = metrics.widthPixels; 
       Log.i("MY", "Actual Screen Height = " + screenHeight + " Width = " + screenWidth); 

       // Now calculate the height that our layout can be set 
       // If you know that your application doesn't have statusBar added, then don't add here also. Same applies to application bar also 
       layoutHeight.set(screenHeight - (titleBarHeight + statusBarHeight)); 
       Log.i("MY", "Layout Height = " + layoutHeight); 

      // Lastly, set the height of the layout  
      FrameLayout.LayoutParams rootParams = (FrameLayout.LayoutParams)root.getLayoutParams(); 
      rootParams.height = layoutHeight.get(); 
      root.setLayoutParams(rootParams); 
     } 
    }); 

return layoutHeight.get(); 
} 
0
LinearLayout YOUR_LinearLayout =(LinearLayout)findViewById(R.id.YOUR_LinearLayout) 
    LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
         /*width*/ ViewGroup.LayoutParams.MATCH_PARENT, 
       /*height*/ 100, 
       /*weight*/ 1.0f 
       ); 
       YOUR_LinearLayout.setLayoutParams(param);