J'ai un scrollview dans lequel se trouve un editext qui est multiline . Je veux faire défiler l'edittext pour voir le contenu inférieur mais cela ne peut pas être fait.
<?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>
Pouvez-vous les gars m'aider dans cela. Je pense que editText devient le focus lorsque le curseur est à l'intérieur.
Merci..!!!!!
Essaye ça..
Ajoutez les lignes ci-dessous dans votre EditText
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Exemple
<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>
MODIFIER
Par programme
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;
}
});
D'abord ajouter ceci à XML
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Android:overScrollMode="always"
Puis ajoutez la même chose "OnTouch" ci-dessus mais faites-la retourner "false" et non "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;
}
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>
S'appuyant sur la réponse de @Ayman Mahgoub et @Hariharan. La solution a bien fonctionné, sauf que lors du défilement du texte édité, il n'y a pas de moment de défilement. Dès que le doigt se lève, le défilement s'arrête immédiatement.
Pour gagner du temps, faites défiler une vue de défilement autour du texte EditText et laissez le contenu de contenu en hauteur de ce dernier (définissez minHeight si vous le souhaitez). Supprimez les lignes suivantes du texte d'édition:
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Android:overScrollMode="always"
Maintenant, le ScrollView imbriqué qui entoure le EditText prend en charge le défilement. Mettez à jour le gestionnaire onTouch pour prendre en compte la hiérarchie de vues mise à jour:
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;
Soyez averti, cette solution est maintenant étroitement liée à la hiérarchie des vues.
Utilisez ce code ça marche
En XML
Android:singleLine="false"
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
En programmation
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;
}
});
Je voterais la réponse mise à jour fournie par @Ayman Mahgoub, mais je n'ai pas une réputation assez élevée. Son code fonctionne. J'ai dû changer return true pour retourner false. Vous mettez la méthode .setOnTouchListener () dans votre classe Java et mettez les trois lignes:
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Android:overScrollMode="always"
dans le fichier XML correspondant. Vous pouvez voir l'implémentation dans l'émulateur Android et sur le téléphone Android que vous utilisez pour les tests. Merci beaucoup @Ayman Mahgoub et @Hariharan!
La réponse ci-dessous vous aidera à faire défiler le texte d'édition dans la vue défilement et à en afficher le nombre.
1. Créez un fichier rectangle_with_border_gray.xml dans le dossier @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.Puis, dans @layout, écrivez ci-dessous le code en mode défilement.
<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. Ensuite, dans votre activité ou votre fragment, écrivez ci-dessous le code:
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) {
}
};
Bonne codage ......
Commencez par créer une classe Scrollview personnalisée comme indiqué ci-dessous:
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;
}
}
Désormais, dans l'activité ou le fragment dans lequel vous utilisez EditText, écrivez le code suivant pour l'objet EditText que vous souhaitez faire défiler dans la vue de défilement:
importer Android.support.v7.app.AppCompatActivity; importer Android.os.Bundle; importer Android.view.MotionEvent; importer Android.view.View; .__ importer Android.widget.EditText ;
classe publique MainActivity étend 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.La suite xml est donnée ci-dessous:
<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>
Cela fera défiler la EditText
et la rendre éditable:
Tout d'abord dans le fichier XML, ajoutez ceci:
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Ensuite, dans le fichier Java, ajoutez ceci:
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;
}
});
Version Kotlin
Ajoutez les lignes suivantes à EditText dans votre XML:
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"
Ajoutez ceci à l'activité/au fragment:
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
}