2013-05-28 12 views
8
<?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="match_parent" 
    android:orientation="vertical" 
    android:minWidth="@dimen/dialog_min_width" 
    android:padding="@dimen/dialog_padding" 
    android:background="@drawable/dialog_background" > 

    <TextView android:id="@+id/base_dialog_title" 
     style="@style/DialogTitleTextViewStyle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:singleLine="true" 
     android:gravity="center" /> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="16dp" > 
    </FrameLayout> 

<!-- *********************** HERE ************************* --> 

    <FrameLayout android:id="@+id/base_dialog_content" 
     android:background="@drawable/dialog_description_background" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </FrameLayout> 

<!-- *********************** HERE ************************* --> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="16dp" > 
    </FrameLayout> 

    <LinearLayout android:id="@+id/base_dialog_button_group" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:orientation="horizontal"> 

    <Button 
     android:id="@+id/base_dialog_button_negative" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:visibility="gone"/> 

    <Button 
     android:id="@+id/base_dialog_button_neutral" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:visibility="gone"/> 

    <Button 
     android:id="@+id/base_dialog_button_positive" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:visibility="gone"/> 

    </LinearLayout> 
</LinearLayout> 

To jest układ fragmentów dialogowych.Chcę ustawić maksymalną wysokość w oknie dialogowym

dodam widok zawartość (TextView lub ListView) do FrameLayout (@ id/base_dialog_content)

Kiedy ListView ma wiele elementów, Dialog jest w pełnej wysokości okna.

Chcę ustawić maksymalną wysokość okna lub wyświetlić zawartość (lub listy)


EDIT:

rozwiązać problem za pomocą OnLayoutChangeListener.

Ale muszę samą funkcję w niższej wersji (poniżej plastra miodu)

W DialogFragment.onCreateView()

FrameLayout contentContainer = (FrameLayout) view.findViewById(R.id.base_dialog_content);  
final View contentView = createContentView(inflater, contentContainer); 
contentContainer.addView(contentView); 

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { 
    // TODO Check content view height and change height 
} else { 
    view.addOnLayoutChangeListener(new OnLayoutChangeListener() { 

     @Override 
     public void onLayoutChange(View v, int left, int top, int right, 
       int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
      int height = v.getHeight(); 
      int contentHeight = contentView.getHeight(); 
      int winHeight = ActivityUtil.getDisplayHeight(getSherlockActivity()); 

      LogUtils.pe(height+"/"+winHeight+"/"+contentHeight); 

      int needHeight = height - winHeight*8/10; 
      if (needHeight > 0) { 
       contentView.setLayoutParams(
         new LayoutParams(LayoutParams.MATCH_PARENT, contentHeight-needHeight)); 
      } 
     } 
    }); 
} 
+0

jak długo znaczy maksymalna wysokość, którą chcesz ustawić jest zdefiniowana w dp lub na podstawie rozmiaru ekranu? –

+0

@NAYO "oparte na rozmiarze ekranu" jest lepsze. ale "stała wartość w dp" jest również dla mnie dobra. – ChangUZ

+0

Proszę zobaczyć moją odpowiedź :) –

Odpowiedz

1

kontrolować maksymalną wysokość trzeba umieścić widok zawartość jednego pojemnika układ pierwszy (normalny/względna) powiedzmy w moim przykładzie użyję linearlayout

zmierzyć wysokość ekranu (I umieścić go w Util.java):

public static int getDisplayHeight(Context context) { 
     WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
     Display display = wm.getDefaultDisplay(); 
     int height = display.getHeight(); 

     return height; 
    } 

potem utworzyć kontener:

LinearLayout llContainerContent = new LinearLayout(context); 
LayoutParams lpContainerContent = new LayoutParams(LayoutParams.FILL_PARENT, (Util.getDisplayHeight(context) * 8) /10); 
llContainerContent.setLayoutParams(lpContainerContent); 

że po dodaniu TextView/ListView do pojemnika następnie dodać kontener do framelayout. Mam nadzieję, że moja odpowiedź jest wystarczająco jasne dla ciebie, ale jeśli masz inne pytania prosimy zapytać w komentarzu :)

+0

Dzięki. Ale nie należy ustawiać MAKSYMALNEJ wysokości. Chcę ustawić maksymalną wysokość, a nie tylko wysokość ... Nie można sprawdzić, czy wysokość widoku treści jest większa niż maksymalna wysokość. – ChangUZ

+0

ah przepraszam źle rozumiem co masz na myśli, proszę poczekaj, zmienię kod później –

+0

@ChangUZ ale myślę, że z moim kodem widok nie będzie znów wypełniał ekranu, czy też chcesz zmierzyć całą wysokość dziecka i uniemożliwić programowi dodanie więcej widoku, jeśli wysokość sumy dzieci jest większa niż rodzic? –

1

użyć tego kodu do pełnej wysokości i szerokości ekranu do dialogowym

WindowManager window = (WindowManager)context 

    .getSystemService(Context.WINDOW_SERVICE); 

    Display display = window.getDefaultDisplay(); 

    displayheight = display.getHeight(); 

    displaywidth = display.getWidth(); 
    dialog.getWindow().setLayout(displaywidth , 
       displayheight); 
Powiązane problemy