Is it possible to set the selected style of EditText to strikethrough in Android. Can anybody show me sample code to do this?
Asked
Active
Viewed 872 times
-1
-
That's for textview right? – Yesudass Moses May 09 '18 at 05:44
-
1Yes, but also interpret the content / answer. To display it, you need to use a RichText display, EditText is not RichText capable. – Matt Clark May 09 '18 at 05:46
3 Answers
1
How to strikethrough TextView text programmatically in Android
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" tools:context=".MainActivity" android:background="@android:color/white" <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sample TextView...\nSecond line of TextView" android:padding="15dp" android:textSize="25dp" android:textColor="#ff9c308c" /> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Set Text Strike Through" android:layout_below="@id/tv" /> </RelativeLayout>
MainActivity.java
package com.cfsuman.me.androidcodesnippets; import android.graphics.Paint; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Get the widgets reference from XML layout RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl); final TextView tv = (TextView) findViewById(R.id.tv); Button btn = (Button) findViewById(R.id.btn); // Set a click listener for Button widget btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /* public int getPaintFlags () Returns the flags on the Paint being used to display the text. setPaintFlags(int flags) Sets flags on the Paint being used to display the text and reflows the text if they are different from the old flags. STRIKE_THRU_TEXT_FLAG Paint flag that applies a strike-through decoration to drawn text. */ // Set TextView text strike through tv.setPaintFlags(tv.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG); } }); } }
From: https://android--code.blogspot.com/2015/05/android-textview-strikethrough.html
-
2This answer can realistically be reduced to a single line of code, `tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);` – Matt Clark May 09 '18 at 05:50
-
1
1
Try this
public class MainActivity extends AppCompatActivity {
EditText editText;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.search_edit_frame);
editText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (MotionEvent.ACTION_UP == event.getAction()) {
if (editText.hasSelection()) {
if(!TextUtils.isEmpty(editText.getText().toString())){
final int selStart = editText.getSelectionStart();
final int selEnd = editText.getSelectionEnd();
SpannableString spannableString = new SpannableString(editText.getText().toString());
spannableString.setSpan(new StrikethroughSpan(), selStart, selEnd, 0);
editText.setText(spannableString);
return false;
}
}
}
return false;
}
});
}
}
LAYOUT
<?xml version="1.0" encoding="utf-8"?>
<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:background="@drawable/rotate">
<EditText
android:id="@+id/search_edit_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="10dp"
android:text="Nilesh Rathod"
android:focusable="true"
android:focusableInTouchMode="true"
android:textColor="@color/colorPrimaryDark" />
</LinearLayout>

AskNilesh
- 67,701
- 16
- 123
- 163
0
can be done by just setting paint flags for editText.
editText.paintFlags = Paint.STRIKE_THRU_TEXT_FLAG
To remove set,
editText.paintFlags = Paint.CURSOR_AFTER

Saad Ali Shujaat
- 419
- 3
- 6