1

作爲一個較大的項目的一部分,我試圖創建一個自定義圖像庫,它將保存來自網絡的圖像。我無法控制它們的大小和佈局(順序,總數[最多十個],每行數[最多三個])由我正在使用的API定義。我使用嵌套LinearLayouts以編程方式構建鬆散電網但這是概念的XML證明...Android layout_height包裝最小的孩子

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:divider="@drawable/photoset_vert_divider" 
    android:showDividers="middle"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:divider="@drawable/photoset_horz_divider" 
     android:showDividers="middle"> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:scaleType="centerCrop" 
      android:layout_gravity="center_vertical" 
      android:adjustViewBounds="true" 
      android:layout_height="wrap_content" 
      android:src="@drawable/tall" /> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:scaleType="centerCrop" 
      android:layout_gravity="center_vertical" 
      android:adjustViewBounds="true" 
      android:layout_height="wrap_content" 
      android:src="@drawable/tall" /> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:scaleType="centerCrop" 
      android:layout_gravity="center_vertical" 
      android:adjustViewBounds="true" 
      android:layout_height="wrap_content" 
      android:src="@drawable/wide" /> 
    </LinearLayout> 
</LinearLayout> 

這就是我正在尋找的60%,並讓我

...但這是我的目標:

我要的是一個android:layout_height="wrap_smallest_content"種將所有ImageView縮放到正確尺寸的東西,然後將它們全部裁剪以匹配「最短」的孩子。

+0

嘗試將此android:scaleType =「centerCrop」替換爲android:scaleType =「fitXY」 .... –

回答

0

既然你說你最終會以編程的方式做到這一點,那麼你總是可以繼承LinearLayout的子類來查找包含ImageView的最小高度,然後將其設置爲佈局的高度。然後,所有你需要處理的圖像的高度設置爲match_parent

0

將固定layout_height設置爲內部LinearLayout真的會更好。你可以做這在XML

如果你專注於各種設備,然後給出一個ID到內部的LinearLayout然後通過測量設備的屏幕大小設置的LinearLayout大小動態。以編程方式測量屏幕尺寸

通過使用DisplayMetrics,您可以獲得任何設備的屏幕高度和寬度。 這裏是代碼。

DisplayMetrics metrics; 
int width = 0, height = 0; 

在你onCreate方法

metrics = new DisplayMetrics();   
getWindowManager().getDefaultDisplay().getMetrics(metrics); 


xheight = metrics.heightPixels;   
xwidth = metrics.widthPixels; 

試試這個讓屏幕高度。

然後設置內的LinearLayout編程這樣

linearLayout.getLayoutParams().height = xheight - 50; 

取決於X字高改變 - 50值

在你的XML將改變這樣的事情

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:divider="@drawable/photoset_vert_divider" 
    android:showDividers="middle"> 

    <LinearLayout 
     android:id="@" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:divider="@drawable/photoset_horz_divider" 
     android:showDividers="middle"> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:scaleType="centerCrop" 
      android:layout_gravity="center_vertical" 
      android:adjustViewBounds="true" 
      android:layout_height="match_parent" 
      android:src="@drawable/tall" /> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:scaleType="centerCrop" 
      android:layout_gravity="center_vertical" 
      android:adjustViewBounds="true" 
      android:layout_height="match_parent" 
      android:src="@drawable/tall" /> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:scaleType="centerCrop" 
      android:layout_gravity="center_vertical" 
      android:adjustViewBounds="true" 
      android:layout_height="match_parent" 
      android:src="@drawable/wide" /> 
    </LinearLayout> 
</LinearLayout>