ScrollView
があり、その中にEditText
があり、垂直にスクロールするように設定されています。しかし、スクロールしません。代わりに、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>
Idが「newTodoText」のEditTextがここで問題になっています。
<ScrollView ></ScrollView>
のような<com.example.VerticalScrollview > </com.example.VerticalScrollview >
をこのカスタムScrollViewに置き換えるだけです。
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;
}
});
// mEdtText1を編集テキストオブジェクトで変更し、mScrlMainをスクロールビューオブジェクトで変更します。これらは確実に動作します。
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
これにより、レイアウト全体がスクロール可能になります。
編集テキストをスクロール可能に設定するには、Android:scrollbars="vertical"
をedittextに
あなたのコードにはすでに書かれています
<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" >
コードから削除します。正常に動作します
nestedScrollViewクラスを使用する必要があります。このクラスは、親スクロール内での子スクロールをサポートします。このクラスは、子または親にすることができます。
<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;
}
});
これを行う簡単な方法は、いくつかの説明とともに以下に記載されています
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;
}
});
このコードを使用する
Xml
Android:singleLine="false"
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Prgramingで
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
を親のほとんどのレイアウトとして設定しました。これが、レイアウト全体がスクロールされる理由です。Android:scrollbars = "vertical"
は、EditTextが大きくなる場合を意味します。垂直のsrollBarが表示されます。 edittextに十分なデータがある場合にのみ、スクロールバーとスクロール効果が得られます。お役に立てれば...