我有一个包含用户输入的textview,每个输入都显示在一个单独的行上。每一行都是一个字符串。我希望每个String都可以选择,这样用户最终可以删除他选择的行。
如何在文本视图中选择单独的行?
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/linctext"
android:textColor="#000000"
android:paddingLeft="20dp"
android:paddingTop="30dp"
android:textSize="13pt"
/>
以下是Java以及
public class MainActivity extends ActionBarActivity {
EditText lincinput;
TextView linctext;
TextView virgintext;
MyDBHandler dbHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lincinput = (EditText) findViewById(R.id.lincinput);
linctext = (TextView) findViewById(R.id.linctext);
virgintext = (TextView) findViewById(R.id.virgintext);
dbHandler = new MyDBHandler(this, null, null, 1);
printDataBase();
}
//Add to database
public void add(View view){
girls girl = new girls(lincinput.getText().toString());
dbHandler.addGirl(girl);
printDataBase();
virgintext.setText("");
}
}
//Delete items
public void delete(View view){
String inputText = lincinput.getText().toString();
dbHandler.deleteGirl(inputText);
printDataBase();
}
public void printDataBase(){
String dbString = dbHandler.databaseToString();
linctext.setText(dbString);
lincinput.setText("");
}
答案 0 :(得分:0)
你在这里。完整的工作示例。这是单行textview,每行有字符串。也可以删除下划线,但这不是当前问题的情况。
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
textView = (TextView) findViewById(android.R.id.text1);
textView.append("\naaa\n");
textView.append("\nbbb\n");
textView.append("\nccc\n");
textView.append("\nddd\n");
textView.setMovementMethod(LinkMovementMethod.getInstance());//IMPORTANT
textView.setText(makeAsClickableLines(textView.getText()), TextView.BufferType.SPANNABLE);
}
private String removeLastN(String text) {
if (text.contains("\n") && text.lastIndexOf("\n") == text.length() - 1)
text = text.substring(0, text.length() - 2);
return text;
}
private String removeMultipleN(String text) {
text = text.replaceAll("\\n+", "\n");
return text;
}
private String removeFirstN(String text) {
if (text.contains("\n") && text.indexOf("\n") == 0)
text = text.substring(1, text.length() - 1);
return text;
}
private CharSequence makeAsClickableLines(CharSequence charSequence) {
if (charSequence.length() == 0)
return charSequence;
String originalTextGlobal = charSequence.toString().trim();
originalTextGlobal = removeFirstN(originalTextGlobal);
originalTextGlobal = removeMultipleN(originalTextGlobal);
originalTextGlobal = removeLastN(originalTextGlobal);
String[] lines = originalTextGlobal.split("\n");
SpannableStringBuilder ssb = new SpannableStringBuilder();
int currentStartGlobal = 0;
for (int i = 0; i < lines.length; i++) {
final String currentLine = lines[i];
final int currentStart = currentStartGlobal;
final int currentLength = currentLine.length();
final String currentText = originalTextGlobal;
SpannableString sb = new SpannableString(currentLine);
sb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Log.d(TAG, "onClick: " + currentLine + " " + currentStart + ":" + (currentStart + currentLength));
String s1 = currentText.substring(0, currentStart);
int startWithLength = currentStart + currentLength + 1;
startWithLength = startWithLength > currentText.length() ? currentText.length() : startWithLength;
String s2 = currentText.substring(startWithLength, currentText.length());
Log.d(TAG, "onClick: " + s1 + " " + s2);
((TextView) widget).setText(makeAsClickableLines(s1 + s2));
}
}, 0, currentLength, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.append(sb).append(i + 1 > lines.length ? "" : "\n");
currentStartGlobal += currentLength;
}
return ssb;
}
private static final String TAG = "MainActivity";
}
点击之前:
您还可以使用行间距来使用textView.setLineSpacing(30, 1);