在 Android 电视上禁用滚动视图
Disable scrollview on Android tv
如何创建带有不可滚动滚动视图的自定义 class?
我试过这个:
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class DisabledScrollView extends ScrollView {
// true if we can scroll (not locked)
// false if we cannot scroll (locked)
private boolean mScrollable = false;
public DisabledScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public DisabledScrollView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public DisabledScrollView(Context context)
{
super(context);
}
public void setScrollingEnabled(boolean enabled) {
mScrollable = enabled;
}
public boolean isScrollable() {
return mScrollable;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false ;
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false ;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// if we can scroll pass the event to the superclass
if (mScrollable) return super.onTouchEvent(ev);
// only continue to handle the touch event if scrolling enabled
return mScrollable; // mScrollable is always false at this point
default:
return super.onTouchEvent(ev);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Don't do anything with intercepted touch events if
// we are not scrollable
if (!mScrollable) return false;
else return super.onInterceptTouchEvent(ev);
}
}
但是我仍然可以滚动。
这个class好像只能在触摸设备上使用,android电视我用方向键。
如何修改此 class 以在 android 电视上运行?
我需要能够仅以编程方式滚动而不是使用垫。
谢谢
您可以使用 ScrollView
的 dispatchKeyEvent 回调 -
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DPAD_DOWN:
if (mScrollable) {
return super.dispatchKeyEvent(event);
}
break;
}
}
return true;
}
基本相同,但使用方向键事件而不是触摸。
Return true
一旦你处理了事件。
如何创建带有不可滚动滚动视图的自定义 class? 我试过这个:
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class DisabledScrollView extends ScrollView {
// true if we can scroll (not locked)
// false if we cannot scroll (locked)
private boolean mScrollable = false;
public DisabledScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public DisabledScrollView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public DisabledScrollView(Context context)
{
super(context);
}
public void setScrollingEnabled(boolean enabled) {
mScrollable = enabled;
}
public boolean isScrollable() {
return mScrollable;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false ;
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false ;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// if we can scroll pass the event to the superclass
if (mScrollable) return super.onTouchEvent(ev);
// only continue to handle the touch event if scrolling enabled
return mScrollable; // mScrollable is always false at this point
default:
return super.onTouchEvent(ev);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Don't do anything with intercepted touch events if
// we are not scrollable
if (!mScrollable) return false;
else return super.onInterceptTouchEvent(ev);
}
}
但是我仍然可以滚动。
这个class好像只能在触摸设备上使用,android电视我用方向键。
如何修改此 class 以在 android 电视上运行? 我需要能够仅以编程方式滚动而不是使用垫。 谢谢
您可以使用 ScrollView
的 dispatchKeyEvent 回调 -
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DPAD_DOWN:
if (mScrollable) {
return super.dispatchKeyEvent(event);
}
break;
}
}
return true;
}
基本相同,但使用方向键事件而不是触摸。
Return true
一旦你处理了事件。