gpt4 book ai didi

android - 如何从 TextView 显示每个点击的单词

转载 作者:太空狗 更新时间:2023-10-29 16:30:06 24 4
gpt4 key购买 nike

我计划开发一个概念非常简单的应用程序。要求是我想从手机添加一个文本文件(动态,所以设置跨度与可点击位置不可能用于可跨越字符串) Intent 选择器的帮助。并且需要在 textView 中显示选定的文件内容(如果你建议的话,任何 View )。单击 textview 内容中的任何单词后,我需要在 Toast 中显示该单词。

    button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showFileChooser();
}
});



private void showFileChooser() {

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
//intent.setType("*/*"); //all files
intent.setType("text/xml"); //XML file only
intent.addCategory(Intent.CATEGORY_OPENABLE);

try {
startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), 1);
} catch (android.content.ActivityNotFoundException ex) {
// Potentially direct the user to the Market with a Dialog
Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show();
}
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 1) {
if (resultCode == RESULT_OK) {
// User pick the file
Uri uri = data.getData();
ExternalFileHandling fileObj=new ExternalFileHandling(getApplicationContext());
String fileContent = fileObj.readTextFile(uri);
aboutTextView.setText(fileContent);
Toast.makeText(this, fileContent, Toast.LENGTH_LONG).show();
} else {
Log.i("data", data.toString());
}
}``


public String readTextFile(Uri uri){
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(Currentcontext.getContentResolver().openInputStream(uri)));
String line = "";

while ((line = reader.readLine()) != null) {
builder.append(line);
}

} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return builder.toString();
}

[![intent chooser for dynamic file content][1]][1]

clicked word marked in RED

最佳答案

我终于得到了我的问题的确切答案

aboutTextView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
mOffset = aboutTextView.getOffsetForPosition(motionEvent.getX(), motionEvent.getY());
// mTxtOffset.setText("" + mOffset);
Toast.makeText(HomeScreen.this, findWordForRightHanded(aboutTextView.getText().toString(), mOffset), Toast.LENGTH_SHORT).show();

}
return false;
}
});



private String findWordForRightHanded(String str, int offset) { // when you touch ' ', this method returns left word.
if (str.length() == offset) {
offset--; // without this code, you will get exception when touching end of the text
}

if (str.charAt(offset) == ' ') {
offset--;
}
int startIndex = offset;
int endIndex = offset;

try {
while (str.charAt(startIndex) != ' ' && str.charAt(startIndex) != '\n') {
startIndex--;
}
} catch (StringIndexOutOfBoundsException e) {
startIndex = 0;
}

try {
while (str.charAt(endIndex) != ' ' && str.charAt(endIndex) != '\n') {
endIndex++;
}
} catch (StringIndexOutOfBoundsException e) {
endIndex = str.length();
}

// without this code, you will get 'here!' instead of 'here'
// if you use only english, just check whether this is alphabet,
// but 'I' use korean, so i use below algorithm to get clean word.
char last = str.charAt(endIndex - 1);
if (last == ',' || last == '.' ||
last == '!' || last == '?' ||
last == ':' || last == ';') {
endIndex--;
}

return str.substring(startIndex, endIndex);
}

关于android - 如何从 TextView 显示每个点击的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41648180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com