如何在Java Android Studio中选择具有不同id的多个文本视图,如findViewById(R.id.)
我正在做一个项目,这部分有一个搜索引擎的功能,突出显示搜索的单词 我有一个EditText和一个按钮,按下按钮时会突出显示EditText中的单词。 当我将findViewByIdR.id.textView1分配给它时,如果您在单个文本视图中搜索它,它将非常有效 但是如果我有超过100个文本视图,我该怎么办?我正在做一本很长的手册。 此外,XML中的每个文本字段都有不同的名称。 例如textView1、txView1、textView2、TXV1等 有可能我需要做什么吗?我找了很多地方,什么也没找到 我留给您.java代码的一部分如何在Java Android Studio中选择具有不同id的多个文本视图,如findViewById(R.id.),java,android,textview,android-edittext,Java,Android,Textview,Android Edittext,我正在做一个项目,这部分有一个搜索引擎的功能,突出显示搜索的单词 我有一个EditText和一个按钮,按下按钮时会突出显示EditText中的单词。 当我将findViewByIdR.id.textView1分配给它时,如果您在单个文本视图中搜索它,它将非常有效 但是如果我有超过100个文本视图,我该怎么办?我正在做一本很长的手册。 此外,XML中的每个文本字段都有不同的名称。 例如textView1、txView1、textView2、TXV1等 有可能我需要做什么吗?我找了很多地方,什么也没
public class Medicina extends AppCompatActivity {
EditText searchview;
Button btnBuscar;
boolean isHighlight = false;
TextHighlighter textHighlighter;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_medicina);
searchview = (EditText)findViewById(R.id.searchview);
btnBuscar = (Button)findViewById(R.id.btnBuscar);
btnBuscar.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
if (!isHighlight){
textHighlighter = new TextHighlighter();
textHighlighter.setBackgroundColor(Color.parseColor("#FFFF00"))
.setBackgroundColor(Color.RED)
.addTarget()
.highlight(searchview.getText().toString(),TextHighlighter.BASE_MATCHER);
}
isHighlight = !isHighlight;
}
});
}
在.addTarget中,会出现findViewById R.id.lalala
如果你只有一个文本视图,它就可以工作,但是它有数百个
多谢各位
从这里开始的前300行XML代码都是一样的,绝大多数是TextView和ImageView。
我将代码上传到GitHub,因为在帖子中粘贴代码时会出现错误
您可以为包含所有文本视图的视图组分配id。然后通过findViewByIdR.id.ViewGroup获取ViewGroup,并循环遍历所有ViewGroup的子视图以获取其所有TextView 帮助您将其与TextHighlighter一起使用的代码段
请随问题附上activity_medicina的xml。activity_medicina的前300行中有3000多行,90%是xml代码的TextView,从现在开始都是一样的,绝大多数是TextView和ImageView。我将代码上传到GitHub,因为在帖子中粘贴代码时会出现错误。我想知道你传递给我的第一个代码应该放在哪里,以及在公共文本Highlighter addTarget中.java应该是什么样子{我收到一个错误addTarget说缺少一个;好的,我已经更新了我的答案。只需将方法getAllTextViewsSimple放在onCreate之外的活动中,因为我看到您将上一个方法放在onCreate中是错误的。在需要获取所有TextViews时调用getAllTextViewsSimple。我还添加了一段代码来帮助您使用它TextHighlighterReady!!!非常感谢!当我查找另一个单词时,前面突出显示的单词将被删除,并且不区分大小写,但这是一个小细节,现在不是优先事项,也不是帖子的情况。再次非常感谢!!
public List<TextView> getAllTextViewsSimple() {
final List<TextView> result = new ArrayList<>();
final ViewGroup viewGroup = findViewById(R.id.viewgroup);
for (int i = 0; i < viewGroup.getChildCount(); i++) {
final View v = viewGroup.getChildAt(i);
if (v instanceof TextView) {
result.add((TextView) v);
}
}
return result;
}
public List<TextView> getAllTextViews(View v) {
final List<TextView> result = new ArrayList<>();
if (v instanceof ViewGroup) {
final ViewGroup viewGroup = (ViewGroup) v;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
result.addAll(getAllTextViews(viewGroup.getChildAt(i)));
}
} else if (v instanceof TextView) {
result.add((TextView) v);
}
return result;
}
final List<TextView> allTextViews = getAllTextViewsSimple();
textHighlighter.setBackgroundColor(Color.parseColor("#FFFF00"))
.setBackgroundColor(Color.RED);
for (TextView tv : allTextViews) {
textHighlighter.addTarget(tv);
}
textHighlighter.highlight(searchview.getText().toString(),TextHighlighter.BASE_MATCHER);