2010-10-07 2 views
19

Вопрос Если у меня есть следующие:min height fill_parent и height wrap_content в ScrollView? (Или просто код в почтовом приложении Compose компоновщика)

<ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <LinearLayout android:layout_width="fill_parent" android:layout_height="?" android:orientation="vertical"> 
     <EditText android:layout_width="fill_parent" android:layout_height="?" android:hint="Subject" android:id="@+id/subject" /> 
     <EditText android:layout_width="fill_parent" android:layout_height="?" android:id="@+id/body" /> 
    </LinearLayout> 
</ScrollView> 

Как я могу получить тело (второй EditText), чтобы заполнить остальную часть экрана, но все-таки есть scrollview пинает, когда содержимое тела слишком длинное? Словно height="wrap_content" и minHeight="fill_parent"

layout_height="fill_parent", кажется, ничего не делать, если поместить их в Scrollview

Рабочий пример того, что я хочу, это электронная почта приложение сочинить окно

Я попробовал этот и элементы EditText действуют так, как будто они являются wrap_content, и заполнение не происходит. Просто прокрутке если вы наберете достаточно

<ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> 
     <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" layout_weight="1" android:hint="Subject" android:id="@+id/subject" /> 
     <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" layout_weight="1" android:id="@+id/body" /> 
    </LinearLayout> 
</ScrollView> 

ответ

53

Я натолкнулся на ссылку mail app source code в my accepted answer on another question. Ответ прост! Добавьте android:fillViewport="true" в <ScrollView...> и добавьте android:layout_weight="1.0" в вид, который вы хотите использовать для всего доступного пространства. поясняется в этом blogspot

+5

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

+0

Ромен Гай объясняет эту технику в сообщении в блоге: http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/ – caw

+1

@MarcoW. как бы вы сделали scrollview, пусть у его ребенка столько места, сколько нужно, но пусть прокрутка имеет максимальную высоту? например: максимальная высота 100dp. если ребенок нуждается в меньшем, то и child, и scrollView имеют свою высоту до этого значения (которое меньше 100dp).если ребенку требуется 100dp или более, то оба из них получат высоту 100dp. –

0

Почему вы не сделать ScrollView быть fill_parent и А и В wrap_content? Единственное, что вы хотите, это то, что ваш ScrollView подходит к экрану.

+0

Я также хочу, чтобы В текстовой заполнить экран. Как min-height: fill_parent. –

+0

Попробуйте с LinearLayout и layout_weight = "1" на каждом A и B с layout_height = "fill_parent" на A и B тоже – fedj

+0

Смотрите мой пример кода выше –

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);
}

5

Как уже упоминалось выше, правильным способом является использование андроида: fillViewport = «истинный» атрибута.

Существует пример, где Vill изображение позиционироваться Н. и Scrollview:

<ScrollView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true"> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:fillViewport="true" 
     android:orientation="vertical"> 

     <LinearLayout 
     android:layout_height="fill_parent" 
     android:layout_width="wrap_content" 
     android:orientation="vertical" 
     android:layout_weight="1"> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="test"/> 
     </LinearLayout> 


     <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="@color/red"> 
     <ImageView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:adjustViewBounds="true" 
      android:src="@drawable/about_us_image_1_land" 
      style="@style/layout_marginTop20"/> 
     </LinearLayout> 
    </LinearLayout> 
    </ScrollView> 
+1

Вместо fill_parent вы действительно должны использовать match_parent. +1 для примера! – Nathan

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