私はmultilineであるeditextが存在するスクロールビューを持っています。編集テキストをスクロールして下位のコンテンツを表示したいのですが、できません。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="50dp"
Android:background="@Android:color/holo_blue_light"
Android:gravity="center" >
<TextView
Android:id="@+id/textView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="View Complaint"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
Android:padding="20dp" >
<TextView
Android:id="@+id/textView2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="15dp"
Android:text="Order Number 0100C1"
Android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
Android:id="@+id/textView3"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="5dp"
Android:text="Name of ClientClient 1"
Android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
Android:id="@+id/textView4"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="5dp"
Android:text="Subject : Measurement Issues"
Android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
Android:id="@+id/textView5"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="25dp"
Android:text="Description"
Android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
Android:id="@+id/textView6"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="15dp"
Android:text="Lorem ipsum dolor sit amet, sapien etiam, nunc amet dolor ac odio mauris justo. Luctus arcu, urna praesent at id quisque ac. Arcu massa vestibulum malesuada, integer vivamus el/ eu "
Android:textAppearance="?android:attr/textAppearanceMedium" />
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >
<TextView
Android:id="@+id/textView7"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="2dp"
Android:text="Assign to"
Android:textAppearance="?android:attr/textAppearanceMedium" />
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="match_parent"
Android:layout_height="40dp"
Android:entries="@array/array_name" />
</LinearLayout>
<EditText
Android:id="@+id/editText1"
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:layout_marginTop="15dp"
Android:background="#eeeeee"
Android:inputType="textMultiLine"
Android:singleLine="false"
Android:text="Android applications normally run entirely on a single thread by default the “UI thread” or the “main thread”.
Android:textAppearance="?android:attr/textAppearanceMedium" ></EditText>
<TextView
Android:id="@+id/textView5"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="20dp"
Android:text="Comment History"
Android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView
Android:id="@+id/imageView1"
Android:layout_width="fill_parent"
Android:layout_height="147dp"
Android:src="@drawable/adddd" />
<CheckBox
Android:id="@+id/checkBox1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="10dp"
Android:text="Close Complaints"
Android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
Android:id="@+id/login"
style="?android:attr/buttonStyleSmall"
Android:layout_width="match_parent"
Android:layout_height="45dp"
Android:layout_below="@+id/ll"
Android:layout_marginLeft="20dp"
Android:layout_marginRight="20dp"
Android:layout_marginTop="15dp"
Android:background="@drawable/login_btn"
Android:text="Submit"
Android:textColor="@Android:color/holo_blue_dark"
Android:textSize="25dp"
Android:textStyle="bold" />
</LinearLayout>
</ScrollView>
</LinearLayout>
みんな助けてくれませんか。 editTextは、カーソルがその中にあるときにフォーカスを得ていると思います。
ありがとう.. !!!!!
これを試して..
以下の行をEditText
に追加します
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
例
<EditText
Android:id="@+id/editText1"
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:layout_marginTop="15dp"
Android:background="#eeeeee"
Android:inputType="textMultiLine"
Android:singleLine="false"
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Android:text="Android applications normally run entirely on a single thread by default the “UI thread” or the “main thread”.
Android:textAppearance="?android:attr/textAppearanceMedium" >
</EditText>
[〜#〜] edit [〜#〜]
プログラムで
youredittext.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (youredittext.hasFocus()) {
v.getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_SCROLL:
v.getParent().requestDisallowInterceptTouchEvent(false);
return true;
}
}
return false;
}
});
最初にこれをXMLに追加します
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Android:overScrollMode="always"
次に、「OnTouch」の上に同じものを追加しますが、「true」ではなく「false」を返します
public boolean onTouch(View view, MotionEvent event) {
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;
}
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>
動作しているこのコードを使用
XMLで
Android:singleLine="false"
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
プログラミング中
edittext.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
if (view.getId() == R.id.edittext) {
view.getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_UP:
view.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
}
return false;
}
});
@Ayman Mahgoubと@Hariharanの回答に基づいて作成します。このソリューションは、編集テキストをスクロールしているときにスクロールの勢いがないことを除いて、非常にうまく機能しました。指を持ち上げるとすぐに、スクロールがすぐに停止します。
スクロールの勢いを得るには、EditTextの周りにscrollviewをラップし、EditTextの高さでコンテンツをラップします(必要に応じてminHeightを設定します)。編集テキストから次の行を削除します。
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Android:overScrollMode="always"
これで、EditTextを囲むネストされたScrollViewがスクロールを処理します。 onTouchハンドラーを更新して、更新されたビュー階層を考慮します。
public boolean onTouch(View view, MotionEvent event) {
v.getParent().getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_UP:
v.getParent().getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return false;
注意してください、このソリューションはビュー階層に密接に結合されています。
@Ayman Mahgoubが提供する更新された回答に賛成票を投じますが、十分な評判はありません。彼のコードは動作します。 falseを返すにはtrueを変更する必要がありました。 .setOnTouchListener()メソッドをJavaクラスに追加し、次の3行を追加します。
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Android:overScrollMode="always"
対応するxmlファイル。実装は、Androidエミュレーター、およびAndroidテストで使用する電話で確認できます。@ Ayman Mahgoubと@Hariharanに感謝します。
以下の回答は、スクロールビュー内でテキストの編集をスクロール可能にし、そのカウントも表示するのに役立ちます。
1. @drawableフォルダーに1つのrectangle_with_border_gray.xmlファイルを作成します。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<corners Android:radius="0dp"/>
<solid Android:color="#FFFFFF"/>
<stroke Android:color="#7f848686"
Android:width="0.01dp"/>
</shape>
2.次に、@ layoutでスクロールビューで以下のコードを記述します。
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="none">
<RelativeLayout
Android:id="@+id/sv_profile_creation_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#FFFFFF">
<LinearLayout
Android:id="@+id/LL_optional_message"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/tv_optional_message_title"
Android:background="@drawable/rectangle_with_border_gray"
Android:orientation="horizontal"
Android:padding="@dimen/margin_02_dp">
<EditText
Android:id="@+id/et_optional_message"
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:background="@color/colorWhite"
Android:gravity="start"
Android:hint="@string/why_not_leave_a_message"
Android:inputType="textMultiLine"
Android:isScrollContainer="true"
Android:maxLines="5"
Android:overScrollMode="always"
Android:padding="8dp"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Android:textColor="@color/colorEditTextHintNormal"
Android:textColorHint="@color/colorEditTextHint"
Android:textSize="@dimen/margin_14_dp" />
</LinearLayout>
<TextView
Android:id="@+id/tv_description_count"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/LL_optional_message"
Android:layout_centerVertical="true"
Android:layout_marginBottom="@dimen/margin_16_dp"
Android:ellipsize="end"
Android:gravity="center"
Android:maxLines="1"
Android:text="0/200"
Android:textColor="@color/colorLittleDarkGray"
Android:textSize="@dimen/margin_12_dp"
Android:textStyle="normal" />
</RelativeLayout>
</ScrollView>
3.次に、アクティビティまたはフラグメント内で以下のコードを記述します。
TextView tv_description_count = (TextView) view.findViewById(R.id.tv_description_count);
EditText et_optional_message = (EditText) findViewById(R.id.et_optional_message);
private void makeScrollable(){
et_optional_message.addTextChangedListener(mTextEditorWatcher);
et_optional_message.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
view.getParent().requestDisallowInterceptTouchEvent(true);
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_SCROLL:
view.getParent().requestDisallowInterceptTouchEvent(false);
return true;
case MotionEvent.ACTION_BUTTON_PRESS:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(et_optional_message, InputMethodManager.SHOW_IMPLICIT);
}
return false;
}
});
}
private final TextWatcher mTextEditorWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
//This sets a textview to the current length
tv_description_count.setText(String.valueOf(s.length()));
}
public void afterTextChanged(Editable s) {
}
};
ハッピーコーディング......
Kotlinバージョン
次の行をxmlのEditTextに追加します。
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
これをアクティビティ/フラグメントに追加します。
myEditText.setOnTouchListener { view, event ->
view.parent.requestDisallowInterceptTouchEvent(true)
if ((event.action and MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP) {
view.parent.requestDisallowInterceptTouchEvent(false)
}
return@setOnTouchListener false
}
最初に、次のようにカスタムScrollviewクラスを作成します。
import Android.content.Context;
import Android.util.AttributeSet;
import Android.util.Log;
import Android.view.MotionEvent;
import Android.widget.ScrollView;
public class MyCustomScrollview extends ScrollView {
public VerticalScrollview(Context context) {
super(context);
}
public VerticalScrollview(Context context, AttributeSet attrs) {
super(context, attrs);
}
public VerticalScrollview(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@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を使用しているアクティビティまたはフラグメントで、Scrollview内でスクロールするEditTextオブジェクトに対して次のコードを記述します。
import Android.support.v7.app.AppCompatActivity; import Android.os.Bundle; import Android.view.MotionEvent; import Android.view.View; import Android.widget.EditText;
パブリッククラスMainActivityはAppCompatActivityを拡張します{
EditText et;
VerticalScrollview sv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
sv = findViewById(R.id.sv);
et = findViewById(R.id.et);
et.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.sv) {
v.getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_UP:
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
}
return false;
}
});
}
}
3.以下のxmlは以下のとおりです。
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context=".MainActivity">
<com.example.ayan.scrollableedittext.VerticalScrollview
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/sv">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="600dp"
Android:gravity="center">
<EditText
Android:id="@+id/et"
Android:layout_width="200dp"
Android:layout_height="80dp"
Android:nestedScrollingEnabled="true"
Android:gravity="start" />
</LinearLayout>
</LinearLayout>
</com.example.ayan.scrollableedittext.VerticalScrollview>
</LinearLayout>
これにより、EditText
がスクロールされ、編集可能になります。
最初にXMLファイルで、これを追加します。
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
次に、Javaファイルに、これを追加します。
EditText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
view.getParent().requestDisallowInterceptTouchEvent(true);
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_SCROLL:
view.getParent().requestDisallowInterceptTouchEvent(false);
return true;
case MotionEvent.ACTION_BUTTON_PRESS:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(EditText, InputMethodManager.SHOW_IMPLICIT);
}
return false;
}
});