2014-01-11 2 views
0

Итак, у меня есть TableLayout, который я хочу поместить в ScrollView. Но у меня есть проблема:Настройка макета в нижней части ScrollView?

The TableLayout изначально пуст, и я программно добавляю к нему TableRows, нажимая кнопку. Это отлично работает, если я положил TableLayout в ScrollView как обычно (т. Е. Когда я прокручиваю, он отлично работает).

Но я хочу сделать так, чтобы TableLayout находился в нижней части ScrollView. Поэтому каждый раз, когда я добавляю TableRow, последняя ячейка всегда будет выровнена в нижней части родительского ScrollView. (вроде того, как работают мобильные чаты - когда вы нажимаете send, ваше сообщение помещается внизу, а все остальные сообщения выдвинуты вверх).

Что происходит, если я использую android:layout_gravity="bottom", чтобы попытаться достичь этого, я не могу прокручивать вверх, поэтому я не могу видеть ни одну из строк, которые выталкиваются вверх из вида экрана. Тем не менее, я могу прокрутить вниз по какой-то причине (в пустоту), что не должно быть возможным, поскольку последний TableRow должен быть внизу.

Это соответствующий код XML (LinearLayout может быть избыточными/не требуется):

<?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:layout_gravity="center"  
android:background="@android:color/black" 
android:orientation="vertical" > 


<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dip" 
    android:layout_gravity="center" 
    android:layout_marginTop="0dp" 
    android:layout_weight="0.1" 
    android:orientation="horizontal" > 

    <!-- 2 Buttons here --> 
</LinearLayout> 

<TextView 
    <!-- attributes of textView> -->/> 

<ScrollView 
    android:id="@+id/tableScrollView" 
    android:layout_width="match_parent" 
    android:layout_weight="0.7" 
    android:layout_height="0dip" 
    android:scrollbars="none" 
    android:orientation="vertical" 
    android:background="@drawable/stripes_background" > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom">  

     <TableLayout 
      android:id="@+id/outputTable" 
      android:layout_alignParentBottom="true" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:padding="10dp" 
      android:divider="@drawable/table_divider" 
      android:showDividers="middle">  
    </TableLayout> 
    </RelativeLayout> 


</ScrollView> 

<Button 
    <!-- Button attributes --> /> 

</LinearLayout> 

enter image description here

Делитель: Divider фона: 3

+0

Вы можете использовать RelativeLayout вместо LinearLayout, а затем использовать атрибут alignparent_bottom. Надеюсь, это поможет вам –

ответ

0
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@android:color/black" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_gravity="center" 
     android:layout_marginTop="0dp" 
     android:orientation="horizontal" > 

     <!-- 2 Buttons here --> 

     <Button 
      android:id="@+id/button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/textview" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="uiop turn" /> 

    <ScrollView 
     android:id="@+id/tableScrollView" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@+id/botton_button" 
     android:layout_below="@+id/textview" 
     android:orientation="vertical" 
     android:scrollbars="none" > 

     <RelativeLayout 
      android:id="@+id/relativelayout" 
      android:layout_width="fill_parent" 
      android:layout_gravity="bottom" 
      android:layout_height="fill_parent" > 

      <TableLayout 
       android:id="@+id/outputTable" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:padding="10dp" 
       android:showDividers="middle" > 

      </TableLayout> 
     </RelativeLayout> 
    </ScrollView> 

    <Button 
     android:id="@+id/botton_button" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:text="roll" /> 

</RelativeLayout> 
+0

Когда я это пробовал, я получаю сообщение об ошибке: 'android: layout_alignParentBottom', который говорит' error: Error: Boolean types not allowed (at 'layout_alignBottom' со значением 'true'). ' – ujvl

+0

its а не «layout_alignBottom», это «layout_alignParentBottom». –

+0

О, ладно, извините. Я изменил его, и теперь нет ошибки. Но у меня все же есть тот же результат: я могу прокручивать вниз, но я не могу прокручивать вверх ... и нет ничего вниз. – ujvl

0

I попробовал это, и это сработало. Это код для Button, который будет прокручиваться донизу, как только я добавлю TableRow в TableLayout tblLayout.

btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       TableRow tbr = new TableRow(getApplicationContext()); 
       TextView tv= new TextView(getBaseContext()); 
       tv.setTextSize(80f); 
       tv.setText("Item" + a++); 
       tbr.addView(tv); 
       tblLayout.addView(tbr); 
       mScroll.post(new Runnable() { 
        public void run() { 
         mScroll.scrollTo(0, mScroll.getBottom()); 
        } 
      }); 
      } 
     }); 

Он должен работать везде, где установлена ​​кнопка. Либо внутри, либо снаружи. Переменная a - int, указанная наверху. Скажите, пожалуйста, если вы не получили ничего и счастливого кодирования!

+0

Спасибо, но это не устраняет мою проблему. Моя проблема связана со всем созданным пользовательским интерфейсом, а не с возможностью прокрутки вниз. Я закрою скриншот за секунду, чтобы уточнить – ujvl

+0

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

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