2012-06-25 5 views
1

У меня есть диалоговое окно с этим содержимым:ScrollView в RelativeLayout заполняющего весь диалог вертикально, отодвигая другие взгляды

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

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginBottom="25dp" > 
     <LinearLayout 
      ... 
     </LinearLayout> 
    </ScrollView> 

    <Button 
     android:id="@+id/closebtn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/scrollview" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

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

Одна вещь, которую я пробовал, заключалась в том, чтобы сделать Button layout_alignParentBottom = "true" и сделать ScrollView layout_above = "@ + id/closebtn", но тогда диалог всегда растягивается, чтобы заполнить весь экран по вертикали, даже если содержимое LinearLayout действительно короткий.

ответ

0

В итоге я изменил свой RelativeLayout на LinearLayout, чтобы получить эту работу. Я не делал этого изначально, потому что, когда я его пробовал, он дал мне очень высокий и тощий диалог (внутренний LinearLayout содержит ImageViews и TextViews). Но, что удивительно, изменение всех моих представлений от width = fill_parent до wrap_content заставило диалог растягиваться горизонтально, чтобы заполнить экран, чего я хотел, и высота ведет себя правильно.

0

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

Чтобы получить размеры экрана (в пикселях):

Get screen dimensions in pixels

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

В вашем XML задайте высоту для вашей кнопки в DP.

Затем вычислите, сколько пикселей на вашей кнопке. См.: What is the difference between "px", "dp", "dip" and "sp" on Android?

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

LayoutParams params = findViewById(R.id.your_scroll_view).getLayoutParams(); 
params.height = screenHeight - buttonHeight; 
+0

Я не думаю, что это будет размер диалогового окна, чтобы уместить только на содержимое, если все они могут соответствовать размеру экрана. – Travis

0

после вы назвали:

AlertDialog dialog = builder.show();  

тогда звоните:

fixScrollViewHeight(scrollView); 

//

private void fixScrollViewHeight(ScrollView scrollView) { 
    int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight(); 
    LayoutParams lp = scrollView.getLayoutParams(); 
    lp.height = screenHeight/3; 
    scrollView.setLayoutParams(lp); 
} 
Смежные вопросы