2014-10-17 6 views
1

Я пытаюсь закодировать dialogFragment, который содержит ListView и кнопку ниже этого ListView. Кнопка должна быть всегда видимой, это означает, что вы можете прокручивать ListView, но кнопка остается всегда видимой.Кнопка ниже listView в DialogFragment

Диалог также должен адаптировать свою высоту. Это означает, что если ListView содержит только FEWS элементы (1 или 2 элемента) DialogFragment не должны заполнить всю высоту экрана ...

Это мой код:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:padding="@dimen/fragment_default_padding" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <ImageView 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:src="@drawable/Back_arrow" 
      android:id="@+id/imgBack" /> 
     <TextView 
      android:text="@string/this_pizzeria_require_a_phone_number_inorderto_accept_orders" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      style="@style/default_title" /> 
     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edtPhoneNumber" 
      android:layout_marginBottom="4dp" 
      android:singleLine="true" 
      android:imeOptions="actionDone" 
      android:hint="@string/choose_from_the_below_list_or_insert_a_new_one_here" 
      android:inputType="phone" /> 
     <ListView 
      android:id="@+id/lvPhones" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_above="@+id/btnAdd" 
      android:dividerHeight="1dp" /> 
     <Button 
      android:id="@+id/btnDone" 
      android:text="@string/done" 
      style="@style/default_button" /> 
    </LinearLayout> 
</RelativeLayout> 

Этот код работает нормально, но если listView содержит много элементов, кнопка внизу исчезает. Это окно диалога: enter image description here

Как вы можете видеть кнопку растягивается, и добавив еще один элемент в ListView, она исчезает.

Есть ли способ достичь моей цели?

Большое спасибо!

+0

добавить андроид: ниже = «@ ID/lvPhones» к кнопке – aProperFox

+0

кнопка находится внутри LinearLayout, я не могу использовать 'below' атрибут – user3471528

+0

Ах извините, я не смотрел на вложенной LinearLayout , Я только посмотрел верхний макет: P – aProperFox

ответ

0

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

android:layout_weight="1" 

и, как правило, разрешен.

<Button 
     android:id="@+id/btnDone" 
     android:text="@string/done" 
     android:layout_weight="1" 
     style="@style/default_button" /> 
+0

вам нужно добавить tat для каждого просмотра, хотя нет? – aProperFox

+0

Нет, добавив его только в один вид, он будет отображаться. Однако было бы полезно добавить представление большего количества макетов и установить весы вместо того, чтобы иметь несколько представлений под одним макетом. – RyPope

+0

Спасибо, но, к сожалению, кнопка все еще исчезает, какая лучшая иерархия раскладки для моей цели? – user3471528

0

Обычно я использую RelativeLayout для этой цели. У вас намного больше контроля над тем, как ваши элементы организованы.

По какой-то причине (я никогда не исследовал его, используя RelativeLayout работает, не теряя времени) ListViews всегда будет распространяться на дно в LinearLayout (по назначению я думаю)

В вашем случае вы можете просто переместить кнопку из линейна к контейнеру ракурса я думаю (это относительное расположение) и выровнять вниз - что верхний RelativeLayout бесполезно в любом случае в коде :-)

0

AlertDialog.Builder Использование с setView() указывая на макете с помощью кнопки удалить и setPositiveButton() как вашей «сделанной» кнопкой. Эта кнопка всегда находится внизу, а диалог автоматически настраивает ее высоту.

public class YourDialogFragment extends DialogFragment implements ... { 
    ... 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog dialog = new AlertDialog.Builder(getActivity()) 
      .setTitle("login") 
      .setView(createDialogView()) 
      .setPositiveButton(R.string.done, this) 
      .create(); 
     dialog.setCancelable(true); 
     return dialog; 
    } 

    private View createDialogView() { 
     final LayoutInflater inflater = getActivity().getLayoutInflater(); 
     View contentView = inflater.inflate(R.layout.content, null); 

     ... 
     ListView listView = (ListView) contentView.findViewById(R.id.lvPhones); 
     listView.setAdapter(adapter); 
    } 
+0

Спасибо, таким образом я не могу настроить кнопку :( – user3471528

+0

, может быть, попробуйте http://stackoverflow.com/questions/21569301/change-android-dialog-button-text-size-via-styles или setBackground() и т. д. в onShow() – biegleux

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