我正在做一个项目,它的一部分具有搜索引擎的功能,突出显示所搜索的单词。
我有一个EditText和一个按钮,当按下该按钮时,会突出显示EditText中的单词。如果在我为它分配findViewById(R.id.textView1)时在单个TextView中搜索它,它会完美工作,但是如果我有超过100个TextView怎么办?我正在写一本很长的手册。此外,XML中的每个TextField都有不同的名称。例如textView1,txView1,textView2,txVi1等
我可能需要做些什么?我在很多地方看过,找不到任何东西。
我把.java代码的一部分留给你
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),如果您只有一个TextView,但它只有数百个,它将可以工作。
谢谢
XML代码的前300行(从这里开始,都是相同的,绝大多数是TextView和ImageView)。我将代码上传到GitHub,因为在帖子中粘贴它会给我一个错误。
您可以为分配一个ID,ViewGroup
其中包含所有TextView
。然后获取ViewGroup
byfindViewById(R.id.viewgroup)
并遍历all的所有ViewGroup
子视图以获取其所有视图TextView
。
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;
}
如果您想要更通用的方法,以防将TextView
其放置在同一位置ViewGroup
。将ID分配给最外层的ID,ViewGroup
然后获取并将其作为参数传递给递归函数以获取所有child TextView
。
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;
}
该代码段可帮助您将其与 TextHighlighter
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句