我如何在 Java Android Studio 中 select 多个具有不同 ID 的 TextView,例如 findViewById(R.id.)
How can I select multiple TextViews with different IDs in Java Android Studio like findViewById(R.id.)
我正在做一个项目,这部分具有搜索引擎的功能,可以突出显示搜索到的词。
我有一个 EditText 和一个按钮,按下按钮时会突出显示 EditText 中的单词。
如果您在单个 TextView 中搜索它,它会完美地工作,因为我将 findViewById(R.id.textView1) 分配给它
但是如果我有超过 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,它也可以工作,但它有数百个。
谢谢
前将近300行XML代码(从这里开始都是一样的,绝大多数是TextView和ImageView)。
我将代码上传到 GitHub,因为在将代码粘贴到 post.
时出现错误
您可以为包含所有 TextView
的 ViewGroup
分配一个 ID。然后通过 findViewById(R.id.viewgroup)
获取 ViewGroup
并遍历所有 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
中。为最外层的 ViewGroup
分配一个 id 然后获取并将其作为参数传递给递归函数以获取所有子 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);
我正在做一个项目,这部分具有搜索引擎的功能,可以突出显示搜索到的词。
我有一个 EditText 和一个按钮,按下按钮时会突出显示 EditText 中的单词。 如果您在单个 TextView 中搜索它,它会完美地工作,因为我将 findViewById(R.id.textView1) 分配给它 但是如果我有超过 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,它也可以工作,但它有数百个。
谢谢
前将近300行XML代码(从这里开始都是一样的,绝大多数是TextView和ImageView)。 我将代码上传到 GitHub,因为在将代码粘贴到 post.
时出现错误您可以为包含所有 TextView
的 ViewGroup
分配一个 ID。然后通过 findViewById(R.id.viewgroup)
获取 ViewGroup
并遍历所有 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
中。为最外层的 ViewGroup
分配一个 id 然后获取并将其作为参数传递给递归函数以获取所有子 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);