包含EditText小部件以及放置在ScrollView中的一些小部件。
我已经使用android设置了EditText的属性:scrollbars =“vertical”以在editText中启用垂直滚动。
现在,当我启动活动时,editText具有焦点,并显示垂直滚动条几秒钟。
这里的问题是当我尝试在EditText中滚动时,ScrollView会移动。
如何在EditText中启用滚动,而不是在scrollview中滚动。
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
.
.
.
<EditText
android:id="@+id/smset"
android:layout_width="match_parent"
android:gravity="top|left"
android:height="100dip"
android:inputType="textMultiLine" >
</EditText>
.
.
.
</LinearLayout>
</ScrollView>
答案 0 :(得分:5)
在你的java文件中
EditText dwEdit = (EditText) findViewById(R.id.DwEdit);
dwEdit.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
// TODO Auto-generated method stub
if (view.getId() ==R.id.DwEdit) {
view.getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction()&MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_UP:
view.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
}
return false;
}
});
在xml中
<EditText
android:id="@+id/DwEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minLines="10"
android:scrollbarStyle="insideInset"
android:scrollbars="vertical"
android:overScrollMode="always"
android:inputType="textCapSentences">
</EditText>
答案 1 :(得分:2)
你也不能放置能在滚动内容中滚动的东西。
当您触摸屏幕时,Android无法确定您要滚动哪个元素,因此根本不支持。 (忽略一些非常糟糕的黑客行为)。
答案 2 :(得分:0)
一个这样的黑客是:
scroll.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
return true;
}
});
请注意,要在ScrollView中启用滚动,您必须运行相同的功能,但使用“return false;”代替。
答案 3 :(得分:0)
如果做得好,我不会说这是不好的做法,但这不是自然期待的事情。
我经常将可滚动视图放在滚动的内容中,但你必须锁定外层并在内部启用滚动。理想情况下,您应该做其他事情,但这是可能的。
您可以将ScrollView
修改为可锁定,例如here。
然后在触摸内部事物时以编程方式锁定LockableScrollView
滚动。
smset.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
// Disables LockableScrollView when the EditText is touched
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
scrollView1.setScrollingEnabled(false);
}
// Enables LockableScrollView when the EditText is touched
if (event.getAction() == MotionEvent.ACTION_UP)
{
scrollView1.setScrollingEnabled(true);
}
return false;
}
});
这样做的缺点是,当触摸EditText时它会禁用滚动,但不会引起任何其他副作用。
答案 4 :(得分:0)
在kotlin中,您可以为所有ExitTextViews编写扩展功能,并在各处使用它们:
fun EditText.setTouchForScrollBars() {
setOnTouchListener { view, event ->
view.parent.requestDisallowInterceptTouchEvent(true)
when (event.action and MotionEvent.ACTION_MASK) {
MotionEvent.ACTION_UP -> view.parent.requestDisallowInterceptTouchEvent(false)
}
false
}
}
但也可以在EditTextView XML中添加以下行:
android:scrollbarStyle="insideInset"
android:scrollbars="vertical"
android:overScrollMode="always"
android:inputType="textMultiLine"