Ich habe ein ScrollView
in dem sich ein EditText
befindet, das vertikal scrollen soll. Es scrollt aber nicht. Stattdessen scrollt das gesamte Layout. Wann immer ich versuche, das EditText
..__ zu scrollen. Unten ist der Code -
<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>
Hier steht der EditText mit der ID "newTodoText" in Frage.
Sie müssen nur Ihren <ScrollView ></ScrollView>
durch diese benutzerdefinierte ScrollView ersetzen, wie <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 hear mEdtText1 mit Ihrem Textobjekt bearbeiten und auch mScrlMain mit Ihrem Scroll-View-Objekt ändern, damit sie definitiv funktionieren.
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
Dadurch wird Ihr gesamtes Layout scrollbar.
Zum Einstellen Ihres edittext-Bildlaufs fügen Sie Android:scrollbars="vertical"
zu Ihrem edittext hinzu.
In Ihrem Code ist es bereits geschrieben
<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" >
Entfernen Sie den Code aus dem Code. Es wird gut funktionieren
sie sollten die NestedScrollView-Klasse verwenden. Diese Klasse unterstützt untergeordnetes Bildlauf innerhalb des übergeordneten Bildlaufs. Diese Klasse kann ein Kind oder ein Elternteil sein.
<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;
}
});
Ein einfacher Weg, dies zu tun, wird unten mit einer Beschreibung beschrieben
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;
}
});
Verwenden Sie diesen Code seine Arbeit
in XML
Android:singleLine="false"
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
in der Planung
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
als übergeordnetes Layout festgelegt. Aus diesem Grund wird Ihr gesamtes Layout gescrollt.Android:scrollbars = "vertical"
verwendet, dh wenn EditText Wächst erscheint eine vertikale srollBar. Sie erhalten die Bildlaufleiste und den Bildlaufeffekt Nur, wenn die Daten in edittext hoch genug sind.Hoffe das hilft...