2013-07-23 3 views
2

У меня проблема с дизайном макета приложения. Это то, что я пытаюсь получить:Android: сделать ImageView соответствовать высоте другого вида

========================================================= 
| ============= ================ ================ | 
| |   | | LinearLayout | | LinearLayout | | 
| |   | | ============ | | ============ | | 
| |   | | | TextView | | | | TextView | | | 
| | ImageView | | ============ | | ============ | | 
| |   | | ============ | | ============ | | 
| |   | | | TextView | | | | TextView | | | 
| |   | | ============ | | ============ | | 
| |   | | ============ | | ============ | | 
| |   | | | TextView | | | | TextView | | | 
| |   | | ============ | | ============ | | 
| ============= ================ ================ | 
========================================================= 

Это whay я сделал до сих пор (я удалил Идентификаторы чужую материал для ясности):

<?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="horizontal" 
    android:gravity="center_vertical" > 


    <ImageView 
     android:contentDescription="@string/logo" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:gravity="left|center_vertical" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="right|center_vertical" 
     android:orientation="vertical" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" /> 

     <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:singleLine="true" /> 

    </LinearLayout> 

</LinearLayout> 

Мои проблема в том, что я хочу использовать изображения с высоким разрешением и масштабировать их, чтобы соответствовать самому высокому линейному расслоению рядом с ним. Моя идея состоит в том, чтобы андроид уменьшал изображение на устройствах с низким разрешением dpi, поэтому использовал те же изображения и макет для всех платформ.

Как и сейчас, высота основного контейнера достигает высоты изображения. Я хочу, чтобы основная высота контейнера была такой же, как и «самый высокий» linearlayout, и заставляла изображение снижаться, чтобы соответствовать основному контейнеру.

Любые идеи?

Спасибо!

PD: Извините мой английский! : $

+0

Возможный дубликат [MATCH \ _PARENT, если вид на сестры больше, WRAP \ _CONTENT, если вид на сестре меньше] (http://stackoverflow.com/questions/17119173/match-parent-if-sibling-view-is- more-wrap-content-if-sibling-view-is-less) – Cris

ответ

1

высоты ширина и все эти питания всех взглядов измеряются в onMeasure() деятельности .. Уведомление достойного Дело в том, onMeasure() любое зрения выполняется непосредственно перед onDraw() и может выполняться n-раз. Таким образом, полезно рассчитать ширину и высоту вашего LinearLayout в onMeasure().

+1

Несмотря на то, что ваш ответ был самым неполным, он был самым полезным. Другие ответы накладывают ограничения на ширину, о которой я не просил. На основе вашего ответа, я думаю, я мог бы создать собственный макет, который фиксирует его высоту на основе другой высоты. Итак, хотя это был не самый лучший ответ, я все еще использую ваш, как принятый ответ. Спасибо Абхишек Шукла! –

0
LinearLayout ll = (LinearLayout)findViewById(R.id.your_linearlayout); 

    int llHeight = ll.getHeight(); 

    ImageView iv = (ImageView)findViewById(R.id.your_imageview); 

    LayoutParams ivParams = ((ImageView)findViewById(R.id.your_imageview)).getLayoutParams(); 

    ivParams.height = llHeight; 

    iv.setLayoutParams(ivParams); 
+0

Извините. Но это не даст мне три взгляда с одинаковой шириной? LinearLayout ориентирован горизонтально, а не вертикально. Я хочу, чтобы изображение было равно той же высоте линейных выходов рядом с ним. Но я не хочу изменять ширину. –

+0

@ Gonzalo Brusco для этого нужно динамически получить высоту линейного макета, а затем установить высоту изображения. – TheFlash

+0

Я хоть об этом. Но если я пойду по этому маршруту, мне придется пересчитать изображение на экране. Я просто надеюсь, что есть простое решение, использующее только xml. Что-то вроде «установить родительскую высоту как этот рост ребенка и игнорировать других детей» Спасибо вам! –

0

Пробуйте использовать приведенный ниже код.

См. Изображение ниже.

Here is the Screen shot of below code

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:weightSum="1" 
      android:background="#FFFFFF" 
      android:layout_height="match_parent"> 

<LinearLayout 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:layout_weight="1" 
     android:background="#000000" 
     android:layout_marginTop="15dp" 
     android:layout_marginBottom="15dp" 
     android:layout_marginLeft="15dp" 
     android:layout_marginRight="15dp" 
     android:weightSum="5" 
     android:orientation="horizontal"> 

    <ImageView 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:layout_weight="0.9" 
      android:background="@drawable/black"/> 

    <LinearLayout 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:layout_weight="1.15"> 
    </LinearLayout> 
    <LinearLayout 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:layout_weight="0.9" 
      android:weightSum="4" 
      android:orientation="vertical"> 

     <TextView 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:layout_weight="1" 
       android:text="Linear Layout" 
       android:gravity="center_vertical|center_horizontal" 
       android:textSize="25dp"/> 
     <TextView 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:layout_weight="1" 
       android:text="TextView" 
       android:gravity="center_vertical|center_horizontal" 
       android:textSize="25dp"/> 
     <TextView 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:layout_weight="1" 
       android:text="TextView" 
       android:gravity="center_vertical|center_horizontal" 
       android:textSize="25dp"/> 
     <TextView 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:layout_weight="1" 
       android:text="TextView" 
       android:gravity="center_vertical|center_horizontal" 
       android:textSize="25dp"/> 
    </LinearLayout> 

<LinearLayout 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:layout_weight="1.15"> 
    </LinearLayout> 
    <LinearLayout 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:layout_weight="0.9" 
      android:weightSum="4" 
      android:orientation="vertical"> 
     <TextView 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:layout_weight="1" 
       android:text="Linear Layout" 
       android:gravity="center_vertical|center_horizontal" 
       android:textSize="25dp"/> 
     <TextView 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:layout_weight="1" 
       android:text="TextView" 
       android:gravity="center_vertical|center_horizontal" 
       android:textSize="25dp"/> 
     <TextView 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:layout_weight="1" 
       android:text="TextView" 
       android:gravity="center_vertical|center_horizontal" 
       android:textSize="25dp"/> 
     <TextView 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:layout_weight="1" 
       android:text="TextView" 
       android:gravity="center_vertical|center_horizontal" 
       android:textSize="25dp"/> 
    </LinearLayout> 
</LinearLayout> 

+5

Вы могли бы использовать лучшее изображение для демонстрации ... Или, по крайней мере, изменить фон на противоположный цвет. – Subby

Смежные вопросы