2013-11-08 8 views
2

У меня есть LinearLayout как сильфонОграничение высоты LinearLayout с ListView и кнопкой

<LinearLayout 
     android:id="@+id/middleLinearLayout" 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:orientation="vertical" > 

      <ListView 
       android:id="@+id/listView1" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="#00000000" 
       android:cacheColorHint="#00000000" 
       android:gravity="center"  
       android:listSelector="@drawable/categories_list_item_selector" > 
      </ListView> 

      <ImageButton 
       android:id="@+id/imageButton1" 
       android:layout_width="300dp" 
       android:layout_height="22dp" 
       android:adjustViewBounds="true" 
       android:background="@android:color/transparent" 
       android:scaleType="fitCenter" 
       android:src="@drawable/button_plus" /> 


    </LinearLayout> 

Я хочу кнопку палки в ListView в нижней части так, если ListView имеет 0 элементов, затем кнопка для перехода вверх ... Если в ListView есть много элементов, я хочу, чтобы Button увеличивался как ListView до тех пор, пока не коснется нижней части Linear, а затем ListView перестанет увеличиваться.

Спасибо за вашу помощь ...

----- EDIT ----------

Мой полный layoout XML, как сильфона

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_gravity="center_horizontal" 
tools:context=".ShowFoodOrSupplement" > 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:scaleType="fitXY" 
    android:src="@drawable/main_bg" /> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 
    android:adjustViewBounds="true" 
    android:orientation="vertical" > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <ImageButton 
      android:id="@+id/backButton" 
      android:layout_width="15dp" 
      android:layout_height="16dp" 
      android:layout_marginLeft="15dp" 
      android:layout_marginTop="10dp" 
      android:background="@android:color/transparent" 
      android:onClick="backBtnClick" 
      android:scaleType="fitXY" 
      android:src="@drawable/back_arrow" /> 

     <ImageView 
      android:id="@+id/imageView2" 
      android:layout_width="245dp" 
      android:layout_height="45dp" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="0dp" 
      android:src="@drawable/general_top_image" /> 

     <TextView 
      android:id="@+id/titleTextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="8dp" 
      android:text="το πρόγραμμά μου" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textSize="12sp" /> 

    </RelativeLayout> 

    <ImageView 
     android:id="@+id/imageView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:adjustViewBounds="true" 
     android:src="@drawable/myprogram_breakfast_image" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="6dp" > 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:src="@drawable/lines_bg_program_food" /> 

     <ImageButton 
      android:id="@+id/imageButton4" 
      android:layout_width="25dp" 
      android:layout_height="25dp" 
      android:layout_marginLeft="40dp" 
      android:background="@android:color/transparent" 
      android:scaleType="fitXY" 
      android:src="@drawable/watch_program" /> 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="5dp" 
      android:layout_toRightOf="@id/imageButton4" 
      android:text="--:--" /> 

     <ImageButton 
      android:id="@+id/imageButton5" 
      android:layout_width="25dp" 
      android:layout_height="25dp" 
      android:layout_centerHorizontal="true" 
      android:background="@android:color/transparent" 
      android:scaleType="fitXY" 
      android:src="@drawable/alarm_icon" /> 

     <ImageButton 
      android:id="@+id/imageButton6" 
      android:layout_width="25dp" 
      android:layout_height="25dp" 
      android:layout_alignParentRight="true" 
      android:layout_marginRight="40dp" 
      android:background="@android:color/transparent" 
      android:scaleType="fitXY" 
      android:src="@drawable/copy_program" /> 
    </RelativeLayout> 

    <TextView 
     android:id="@+id/textView9" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="5dp" 
     android:layout_marginTop="3dp" 
     android:text="Kcal" 
     android:layout_gravity="right" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#000000" /> 

    <RelativeLayout 
     android:id="@+id/middleLinearLayout" 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:orientation="vertical" > 

      <ListView 
       android:id="@+id/listView1" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="#00000000" 
       android:cacheColorHint="#00000000" 
       android:gravity="center" 
       android:listSelector="@drawable/categories_list_item_selector" > 
      </ListView> 

      <ImageButton 
       android:id="@+id/imageButton1" 
       android:layout_width="300dp" 
       android:layout_height="22dp" 
       android:adjustViewBounds="true" 
       android:layout_below="@id/listView1" 
       android:background="@android:color/transparent" 
       android:scaleType="fitCenter" 
       android:onClick="PickSomeFood" 
       android:src="@drawable/button_plus" /> 


    </RelativeLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:layout_marginBottom="10dp" 
      android:layout_marginTop="10dp" 
      android:background="@android:color/darker_gray" /> 

     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="match_parent" > 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_marginLeft="20dp" 
       android:text="σύνολο θερμίδων:" /> 

      <TextView 
       android:id="@+id/textView3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:layout_marginRight="20dp" 
       android:text="0 Kcal" /> 
     </RelativeLayout> 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:layout_marginBottom="10dp" 
      android:layout_marginTop="10dp" 
      android:background="@android:color/darker_gray" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" > 

     <FrameLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 

      <ImageButton 
       android:layout_width="130dp" 
       android:layout_height="35dp" 
       android:background="@android:color/transparent" 
       android:scaleType="fitXY" 
       android:src="@drawable/profile_form_save_button" /> 

      <TextView 
       android:id="@+id/text" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_gravity="center" 
       android:text="αποθήκευση" 
       android:textColor="#ffffff" 
       android:textSize="14sp" /> 
     </FrameLayout> 

     <FrameLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 

      <ImageButton 
       android:id="@+id/ImageButton02" 
       android:layout_width="130dp" 
       android:layout_height="35dp" 
       android:layout_gravity="center" 
       android:background="@android:color/transparent" 
       android:scaleType="fitXY" 
       android:src="@drawable/profile_form_save_button" /> 

      <TextView 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_gravity="center" 
       android:text="διαγραφή" 
       android:textColor="#ffffff" 
       android:textSize="14sp" /> 
     </FrameLayout> 
    </LinearLayout> 

    <ImageView 
     android:id="@+id/imageViewBottom" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:layout_marginBottom="5dp" 
     android:src="@drawable/bottom_schedule" /> 

</LinearLayout> 

Так что я хочу, чтобы первый линейный, чтобы получить полную высоту экрана, , затем внутри всех виджетов выше среднегоLinearLayout, чтобы идти сверху, а остальное под middleLinearLayout идти внизу. Мне удалось это с добавлением android: layout_weight = "1", так что middleLinearLayout получает остальную высоту ...

Теперь внутри middleLinearLayout у меня есть ListView и кнопка ... Я хочу, например, если элементы ListView 2, тогда кнопка будет придерживаться в нижней части ListView и будет свободное пространство до конца middleLinearLayout ...

Проблема в том, что если элементы ListView больше, чем высота middleLinearLayout, то UIImageButton под ListView Disappears ...

+1

вы можете добавить кнопку в виде нижнего колонтитула в listview – Raghunandan

+0

взять как LIST VIEW, так и кнопку ИЗОБРАЖЕНИЯ в двух горизонтальных макетах вкладышей и сделать вес LIST VIEW's Linearlayout до 1 и искать выход –

ответ

2

То, что вы хотите, я думаю, представляет собой контейнер (LinearLayout или RelativeLayout), который, как вы уже обнаружили, находится между двумя другими видами, используя android:weight="1".

Внутри этого контейнера вы хотите ListView и Button. Кнопка должна находиться непосредственно под элементами списка.

Ответ на @Malachiasz правильно, это означает, что ваша кнопка будет всегда ниже вашего ListView, но теперь вы столкнулись с другой проблемой - что из-за размера ListView в Button уже видна, потому что это Безразлично» t внутри вашего контейнера.

К сожалению, вы не можете достичь этого поведения, в то время как у ListView есть родитель с дискретным размером в его родословной. Ваш ListView может быть дискретным размером (100dp), размером по отношению к нему (wrap_contents) или размером относительно его родителя (90%, заливка и т. Д.).

Если вы дадите ему дискретный размер или размер относительно его родителя, кнопка останется привязанной к нижней части списка (или к нижней части контейнера) и никогда не будет перемещаться вверх или вниз в зависимости от списка добавляемые предметы. Визуально, однако, это выглядело бы прекрасно, легко сделать его правильным.

Если вы даете ListView размер по отношению к себе (wrap_content), то ваш Button будет правильно двигаться вверх или вниз в зависимости от содержимого списков, однако, если ListView имеет предка с любой высоты, кроме wrap_contents вы будете в конечном счете, войдет в положение, в котором ListView будет больше, чем его контейнер, и кнопка исчезнет (вы также не сможете прокрутить до последних элементов в своем списке).

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

+0

Спасибо большое @Graeme, я пойду с решением добавления нижнего колонтитула в ListView ... В том же проекте в iOS я подсчитываю элементы, и если они больше, чем подходит, я устанавливаю высоту таблицы кода ... В любом случае, спасибо за ваше время, и я ценю вашу помощь. – Anaisthitos

+0

В этом вопросе/ответе описывается нижний колонтитул ListView api: http://stackoverflow.com/a/4265324/726954 - Насколько я могу судить, однако, у вас все еще будет такая же проблема, что и содержимое ListView будет означать ваш Список растет больше, чем его контейнер, и нижний колонтитул также исчезнет? – Graeme

2

Используйте RelativeLayout вместо LinearLayout и задайте свойство ImageButton android: layout_below = "@ id/listView1"

+0

извините, но ваше решение не работает ... Спасибо для вашего времени, хотя ... – Anaisthitos

+0

возможно, попробуйте с самым родительским RelativeLayout android: layout_height = "match_parent", а не layout_height = "0dip", чтобы исключить его, проблема там не существует. – Malachiasz

+0

@ Anaisthitos - В каком смысле это не работает? – Graeme

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