【问题标题】:Vertical scrollable TableLayout垂直可滚动的 TableLayout
【发布时间】:2013-12-05 21:00:37
【问题描述】:

在名为 NowePomieszczenie 的活动中,我将函数 pokazdane 设为 创建新的 TableLayout 并在 TableLayout 的行 (wiersz) 中包含来自数据库 (bazakosztorys) 的数据 (kosztorys_id、kosztorys_nazwa、inwestor)。功能是通过点击按钮(wybierzkosztorys)执行的,就像附加的图像一样。它工作得很好,但带有数据库数据的表不可滚动。我该如何解决?

wyglad.setVerticalScrollBarEnabled(true); 不工作

https://www.dropbox.com/s/ovqsyg990ymgsra/widok.jpg

公共类 NowePomieszczenie 扩展 Activity 实现 OnClickListener{

SQLiteDatabase db;
TextView textview1,textview2,textview3, textview4, textview5;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.nowe_pomieszczenie);
    db=openOrCreateDatabase("baza_kosztorys", MODE_PRIVATE, null);
}

public void pokazdane(查看 v) {

final Cursor c=db.rawQuery("SELECT * from kosztorys", null);
int count= c.getCount();
c.moveToFirst();

//definicja wygladu
final TableLayout wyglad = new TableLayout(getApplicationContext());
wyglad.setVerticalScrollBarEnabled(true);
TableRow wiersz = new TableRow(getApplicationContext());

//dodanie napisu id nad kolumna id
TextView textview = new TextView(getApplicationContext());
textview.setText("DOSTĘPNE KOSZTORYSY");
textview.setTextColor(Color.BLUE);
textview.setTypeface(null, Typeface.BOLD);
textview.setPadding(20, 20, 20, 20);
wiersz.addView(textview);

wyglad.addView(wiersz);

   for(Integer j=0; j<count; j++)
     {
        //przechwytywanie pierwszej kolumny
       wiersz = new TableRow(getApplicationContext());
       wiersz.setClickable(true);
       wiersz.setId(Integer.parseInt(c.getString(c.getColumnIndex("kosztorys_id"))));


     textview = new TextView(getApplicationContext());
     textview.setText(c.getString(c.getColumnIndex("kosztorys_id")));   
     textview2 = new TextView(getApplicationContext());
     textview2.setText(c.getString(c.getColumnIndex("kosztorys_nazwa")));
     textview3 = new TextView(getApplicationContext());
     textview3.setText(c.getString(c.getColumnIndex("inwestor")));

      wiersz.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                  int idrow=  v.getId();
                   v.setBackgroundColor(Color.GRAY);  

            }       
        }); 
   //  wiersz.addView(textview);
       textview2.setPadding(20, 20, 20, 20);
       textview3.setPadding(20, 20, 20, 20);

    // wiersz.addView(textview);
       wiersz.addView(textview2);
       wiersz.addView(textview3);
       wyglad.addView(wiersz);

       c.moveToNext();
     }
     setContentView(wyglad);
     db.close();

}

【问题讨论】:

  • 在 Horizo​​ntalScrollView 中添加您的 TableLayout。
  • 对不起,我的意思是垂直滚动而不是水平滚动,我的错误我更正了标题
  • 然后使用 ScrollView 代替 Horizo​​ntalScrollView。
  • 我尝试在代码中添加它,但它不起作用ScrollView scroller = new ScrollView(getApplicationContext()); final TableLayout wyglad = new TableLayout(getApplicationContext()); scroller.setVerticalScrollBarEnabled(true);

标签: java android scroll tablelayout


【解决方案1】:

您应该在您的 XML 布局中放置一个 ScrollView 围绕您想要滚动的布局。

 <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1" 
        >

... your layout

</ScrollView>

【讨论】:

  • 对不起,我的意思是垂直滚动而不是水平滚动,我的错误我更正了标题
  • 没问题,我改了答案,希望对你有帮助。
  • 它不起作用:/,我将您的代码放入我的 xml 文件中,然后我的按钮 wybierzkosztorys 消失了。我在图片中指出了我需要做什么以及何时dropbox.com/s/fp3rcwt2nnpwtml/widok2.jpg
  • 您的 ScrollView 应该在布局本身内(例如 LinearLayout),而您的 TableLayout 应该在 ScrollView 内。
  • 所以我应该从 nowepomieszczenie.xml 中删除 ScrollView(它用于显示按钮 wybierz_kosztorys)并在单击按钮时执行的我的函数 pokazdane 中的代码中创建的 TableLyout 之前添加声明 new ScrollView 吗?对吧?
【解决方案2】:

您可以在 xml 文件中使用像这样的自定义垂直滚动视图

垂直滚动视图:

package com.xyz.utils;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class VerticalScrollview extends ScrollView {

    public VerticalScrollview(Context context) {
        super(context);
    }

    public VerticalScrollview(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public VerticalScrollview(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action) {
        case MotionEvent.ACTION_DOWN:
            Log.i("VerticalScrollview",
                    "onInterceptTouchEvent: DOWN super false");
            super.onTouchEvent(ev);
            break;

        case MotionEvent.ACTION_MOVE:
            return false; // redirect MotionEvents to ourself

        case MotionEvent.ACTION_CANCEL:
            Log.i("VerticalScrollview",
                    "onInterceptTouchEvent: CANCEL super false");
            super.onTouchEvent(ev);
            break;

        case MotionEvent.ACTION_UP:
            Log.i("VerticalScrollview", "onInterceptTouchEvent: UP super false");
            return false;

        default:
            Log.i("VerticalScrollview", "onInterceptTouchEvent: " + action);
            break;
        }

        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);
        Log.i("VerticalScrollview", "onTouchEvent. action: " + ev.getAction());
        return true;
    }
}

【讨论】: