2015-01-29 3 views
0

Мне нужно, чтобы отобразить TextView в нижней части ScrollView, так что:Компоновка текст нижнего колонтитула в ScrollView

  • Если высота содержания ScrollView меньше высоты ScrollView, то текст должен быть в нижней части Scrollview

    +============+ 
    | content | 
    |   | 
    +------------+ 
    | w/space | 
    |   | 
    +------------+ 
    | footer txt | 
    +============+ 
    
  • Если высота содержания ScrollView больше, чем высота ScrollView, то текст должен непосредственно следовать содержание.

    +============+ 
    | content | 
    |   | 
    |   | 
    | content | 
    |   | 
    |   | 
    | content | 
    +============+ 
    :   : \ 
    : content : bottom edge of device 
    :------------: 
    : footer txt : 
    +------------+ 
    

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

Могу ли я достичь этого макета, используя только XML?

+1

Это выглядит сложным решением только с использованием XML. Я бы, вероятно, использовал FrameLayout, чтобы наложить текст нижнего колонтитула, когда содержимое недостаточно длинное, затем скройте его и покажите копию текста нижнего колонтитула, находящегося внутри ScrollView, когда содержимое больше, чем экран. –

ответ

0

Это должно быть так же просто, как создание другого макета под макетом прокрутки для хранения всего содержимого, а затем приклеивания текста нижнего колонтитула в макете содержимого.

вот решение в XML:

<?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" > 

    <ScrollView 
     android:id="@+id/scrollView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <LinearLayout 
      android:id="@+id/scrollViewLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <LinearLayout 
       android:id="@+id/contentLayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" > 

       <!-- PUT YOUR CONTENT IN THIS LAYOUT --> 

      </LinearLayout> 

      <TextView 
       android:id="@+id/footerText" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="footer text" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

     </LinearLayout> 
    </ScrollView> 

</LinearLayout> 

Если все ваше содержание равномерна, то вам лучше всего на самом деле использует ListView и настройки колонтитула TextView программно, как например:

listView.addFooterView(yourTextView); 
0

I просто наткнулся на сообщение в блоге Ромена Гая с 2010 года, в котором говорится об этой точной проблеме и о том, как ее решить.

http://www.curious-creature.com/2010/08/15/scrollviews-handy-trick/

ScrollView должны иметь свойство android:fillViewport="true" и представление в поле зрения ребенка в Scrollview, что это расширить, чтобы заполнить пространство должно быть только один с указанным layout_weight.

Я только что протестировал этот подход, и он работает по назначению.

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