2013-12-05 6 views
2

Я использую таблицу, которая требует как вертикальной, так и горизонтальной прокрутки. Я использовал два вида прокрутки, чтобы сделать это, как показано ниже. Можно ли использовать один для обеих целей?Как Veritcal, так и Horizontal Scrollview

LinearLayout contentView = (LinearLayout) findViewById(R.id.contentView); 
TableLayout tableLayout = new TableLayout(getApplicationContext()); 
TableRow tableRow; 
TextView textView; 

    for (int i = 0; i <28; i++) { 
    tableRow = new TableRow(getApplicationContext()); 
    for (int j = 0; j < 16; j++) { 
     textView = new TextView(getApplicationContext()); 
     textView.setText("test"); 
     textView.setPadding(20, 20, 20, 20); 
     tableRow.addView(textView); 
    } 
    tableLayout.addView(tableRow); 
} 
ScrollView scroll = new ScrollView(MainActivity.this); 
scroll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
            LayoutParams.FILL_PARENT)); 
scroll.addView(tableLayout); 
HorizontalScrollView horizontalScroll = new HorizontalScrollView(MainActivity.this); 
horizontalScroll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
               LayoutParams.FILL_PARENT)); 
horizontalScroll.addView(scroll); 
contentView.addView(horizontalScroll); 

ответ

2

Вы можете использовать код вида пользовательских прокрутки, которые можно использовать в файле XML: включить один Scrollview как горизонтальная и вертикальная Значение. Это один небольшой образец для вертикальной прокрутки. В этом случае вы также можете использовать Горизонтальные также

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