2013-05-28 3 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> 

Dies ist Dialogfragment Layout.Ich möchte die maximale Höhe in Dialogfragment setzen

I fügen Sie Inhalt Ansicht (Textview oder Listview) in FrameLayout (@ id/base_dialog_content)

Wenn Listview viele Elemente hat, Dialog in Fenster in voller Höhe.

Ich möchte maximale Höhe Dialog oder Inhaltsansicht (oder Listenansicht)


bearbeiten setzen:

Ich löse das Problem mit OnLayoutChangeListener.

Aber ich brauche gleiche Funktion in niedrigere Version (unter Honeycomb)

In 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

wie lange die maximale Höhe, die Sie wollen, ist es in DP oder basierend auf der Bildschirmgröße definiert? –

+0

@NAYOSO "basierend auf Bildschirmgröße" ist besser. aber "konstanter Wert in DP" ist auch gut für mich. – ChangUZ

+0

Bitte sehen Sie meine Antwort :) –

Antwort

1

die maximale Höhe der Inhalt Ansicht in einem Layout Behälter geben müssen zu kontrollieren erste (Linear/Relative) lassen sie sich in meinem Beispiel sagen, ich Linearlayout

, um die Bildschirmhöhe zu messen (ich habe es in Util.java) verwenden werden:

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

     return height; 
    } 

danach erstellen Sie einen Container:

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

nach, dass Sie die Textview/Listview in den Behälter dann fügen Sie Sie den Behälter mit dem framelayout hinzuzufügen. Ich hoffe, meine Antwort für Sie klar genug ist, aber wenn Sie weitere Fragen haben wenden Sie sich bitte im Kommentar fragen :)

+0

Danke. Aber es ist nicht die maximale Höhe einzustellen. Ich möchte die maximale Höhe und nicht nur die Höhe einstellen ... Es kann nicht überprüft werden, ob die Höhe der Inhaltsansicht größer als die maximale Höhe ist. – ChangUZ

+0

ah Entschuldigung, ich verstehe falsch, was Sie meinen, bitte warten Ich werde den Code später ändern –

+0

@ChangUZ aber ich denke, mit meinem Code wird die Ansicht nicht den Bildschirm wieder füllen, oder möchten Sie alle Kind Höhe messen und Verhindern Sie, dass das Programm mehr Ansichten hinzufügt, wenn die Summe der untergeordneten Elemente größer ist als die des übergeordneten Elements. –

1

Verwenden Sie diesen Code für die Vollbildhöhe und -breite für den Dialog

WindowManager window = (WindowManager)context 

    .getSystemService(Context.WINDOW_SERVICE); 

    Display display = window.getDefaultDisplay(); 

    displayheight = display.getHeight(); 

    displaywidth = display.getWidth(); 
    dialog.getWindow().setLayout(displaywidth , 
       displayheight);