J'ai une ScrollView
à l'intérieur de laquelle se trouve une EditText
qui est configurée pour faire défiler verticalement. Mais ça ne défile pas. Au lieu de cela, toute la présentation défile, chaque fois que j’essaie de faire défiler la EditText
.
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical" >
<TextView
Android:id="@+id/b1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="39dp"
Android:text="Title"
Android:textColor="#3bb9ff"
Android:textSize="15sp" />
<EditText
Android:id="@+id/Text1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:ems="10"
Android:hint="Title"
Android:singleLine="true" >
<requestFocus />
</EditText>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Content"
Android:layout_marginTop="50dp"
Android:textColor="#3bb9ff"
Android:textSize="15sp"
/>
<EditText
Android:id="@+id/newTodoText"
Android:layout_width="fill_parent"
Android:layout_height="match_parent"
Android:minLines="2"
Android:maxLines="7"
Android:hint="Write something"
Android:scrollbars = "vertical" >
</EditText>
<Button
Android:id="@+id/Add"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:text="Add" />
</LinearLayout>
</ScrollView>
Le EditText avec l'id "newTodoText" est en question ici.
Vous devez simplement remplacer votre <ScrollView ></ScrollView>
par ce ScrollView personnalisé comme <com.example.VerticalScrollview > </com.example.VerticalScrollview >
package com.example;
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;
}
}
EditText EtOne = (EditText) findViewById(R.id.EditText01);
EtOne.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.EditText01) {
v.getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_UP:
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
}
return false;
}
});
mEdtText1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
mScrlMain.requestDisallowInterceptTouchEvent(true);
return false;
}
});
// change entendez mEdtText1 avec votre objet texte d'édition et changez également mScrlMain avec votre objet de vue de défilement, ils fonctionnent parfaitement.
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
Cela fera défiler toute votre mise en page.
Pour configurer votre edittext scrollable, ajoutez Android:scrollbars="vertical"
à votre edittext
Dans votre code c'est déjà écrit
<EditText
Android:id="@+id/newTodoText"
Android:layout_width="fill_parent"
Android:layout_height="match_parent"
Android:minLines="2"
Android:maxLines="7"
Android:hint="Write something"
Android:scrollbars = "vertical" >
Supprimer le code.Il fonctionnera bien
vous devriez utiliser la classe NestedScrollView. Cette classe prend en charge le défilement enfant dans le défilement parent. Cette classe peut être un enfant ou un parent.
<Android.support.v4.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#d6d8d9">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:maxLines="512"
Android:text=" your content"/>
<Android.support.v4.widget.NestedScrollView
Android:layout_below="@id/ll_button"
Android:layout_width="match_parent"
Android:layout_height="300dp"
Android:background="#d6d8d9">
<EditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="your content"
Android:maxLines="512"/>
</Android.support.v4.widget.NestedScrollView>
</LinearLayout>
</Android.support.v4.widget.NestedScrollView>
noteEdit.setMovementMethod(new ScrollingMovementMethod());
ScrollingMovementMethod.getInstance();
noteEdit.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
noteEdit.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
Un moyen simple de le faire est mentionné ci-dessous avec une description
myEditText.setOnTouchListener(new View.OnTouchListener() { //Register a callback to be invoked when a touch event is sent to this view.
@Override
public boolean onTouch(View v, MotionEvent event) {
//Called when a touch event is dispatched to a view. This allows listeners to get a chance to respond before the target view.
mScrollView.requestDisallowInterceptTouchEvent(true);
return false;
}
});
Utilisez ce code Son fonctionnement
en xml
Android:singleLine="false"
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
en pragraming
et_feedback.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
if (view.getId() == R.id.et_feedback) {
view.getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_UP:
view.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
}
return false;
}
});
ScrollView
comme disposition la plus parent. C'est la raison Toute votre mise en page est défilée.Android:scrollbars = "vertical"
qui signifie si le EditText Grandit un barre verticale srollBar apparaîtra. Vous obtiendrez la barre de défilement et l’effet de défilement Uniquement si edittext a des données suffisamment hautes.J'espère que cela t'aides...