2012-03-09 85 views
1

具有EditText小部件以及放置在ScrollView中的一些小部件。EditText滚动条和ScrollView

我用android:scrollbars =“vertical”设置了EditText的属性,以便在editText里面垂直滚动。

现在,当我启动活动时,editText具有焦点,并且它显示了几秒钟的垂直滚动条。

这里的问题是当我尝试在EditText中滚动时,ScrollView移动。

如何在EditText中启用滚动而不在滚动视图中。

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

回答

2

您不能放置可以滚动的东西,也可以滚动内容。

当你触摸屏幕时,Android不能确定你想要滚动哪个元素,所以根本不支持它。 (忽略一些非常糟糕的黑客行为)。

+0

我需要你帮上滚动视图u能帮助我对 – Developer 2013-08-06 10:22:06

+0

@Gaurav使一个问题,显示你尝试过,解释你的问题,并使用适当的英语(而不是“你”应该是“你”等)。 – WarrenFaith 2013-08-06 10:24:24

+0

我已发布此在http://stackoverflow.com/questions/18077726/scroll-view-is-not-working-properly-android请帮我在这 – Developer 2013-08-06 10:33:12

0

一个这样的手段是:

scroll.setOnTouchListener(new OnTouchListener() 
{ 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     return true; 
    } 
}); 

注意,为了能够在滚动型滚动,你必须运行相同的功能,但与“返回false;”代替。

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上被触摸它,将禁用滚动,但它不应该引起任何其他副作用。

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>