Как прокрутить edittext внутри прокрутки
У меня есть scrollview, внутри которого есть editext, который является многострочным. Я хочу прокрутить edittext, чтобы увидеть более низкое содержимое, но это невозможно.
<?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>
![enter image description here]()
Можете ли вы, ребята, помочь мне в этом. Я думаю, что editText получает фокус, когда курсор находится внутри него.
Спасибо..!!!!!
Ответы
Ответ 1
Попробуй это..
Добавьте строки ниже в ваш 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>
РЕДАКТИРОВАТЬ
Программный
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;
}
});
Ответ 2
Сначала добавьте это в XML
android:scrollbarStyle="insideInset"
android:scrollbars="vertical"
android:overScrollMode="always"
Затем добавьте то же самое выше "OnTouch", но верните "false", а не "true"
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;
}
Ответ 3
вы должны использовать класс 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>
Ответ 4
Используйте этот код, это работает
В 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;
}
});
Ответ 5
Основываясь на ответе @Ayman Mahgoub и @Hariharan. Решение отлично поработало, за исключением того, что при прокрутке текста редактирования нет прокрутки. Как только палец поднимается, прокрутка немедленно останавливается.
Чтобы получить силу прокрутки, прокрутите прокрутку вокруг EditText и дайте надстроить обертку в TextText (установите minHeight, если хотите). Удалите из текста редактирования следующие строки:
android:scrollbarStyle="insideInset"
android:scrollbars="vertical"
android:overScrollMode="always"
Теперь вложенный ScrollView, обернутый вокруг EditText, позаботится о прокрутке. Обновите обработчик 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;
Будем предупреждать, что это решение теперь тесно связано с иерархией представлений.
Gist: https://gist.github.com/atoennis/7549fba2634d0abccddf
Ответ 6
Я проголосую за обновленный ответ, предоставленный @Ayman Mahgoub, но у меня нет достаточно высокой репутации. Его код работает. Мне пришлось изменить return true, чтобы вернуть false. Вы помещаете метод .setOnTouchListener() в свой Java-класс и помещаете три строки:
android:scrollbarStyle="insideInset"
android:scrollbars="vertical"
android:overScrollMode="always"
в соответствующем файле xml. Вы можете увидеть реализацию в эмуляторе Android и на телефоне Android, который вы используете для тестирования. Большое вам спасибо @Ayman Mahgoub и @Hariharan!
Ответ 7
Ниже ответ поможет вам сделать редактируемый текст прокручиваемым в представлении прокрутки, а также отобразить его количество.
1. Сделайте один файл rectangle_with_border_gray.xml в папке @drawable.
<?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) {
}
};
Удачного кодирования......
Ответ 8
Котлин версия
Добавьте следующие строки в EditText в вашем XML:
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)
}
[email protected] false
}
Ответ 9
Это прокрутит 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;
}
});
Ответ 10
Сначала создайте собственный класс 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, напишите следующий код для объекта EditText, который вы хотите прокрутить внутри Scrollview:
import android.support.v7.app.AppCompatActivity; импорт android.os.Bundle; import android.view.MotionEvent; импорт 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>
Ответ 11
Добавьте этот метод в основной вид деятельности:
У меня это сработало во Фрагменте
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (v instanceof EditText) {
Rect outRect = new Rect();
v.getGlobalVisibleRect(outRect);
if (!outRect.contains((int) event.getRawX(), (int) event.getRawY())) {
v.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
return super.dispatchTouchEvent(event);
}