如何在textview

时间:2016-01-07 08:23:41

标签: java android xml string textview

我有一个包含用户输入的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("");
}

1 个答案:

答案 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";

}

点击之前:

enter image description here 点击后:

enter image description here

您还可以使用行间距来使用textView.setLineSpacing(30, 1);

点击当前行