我正在尝试计算向用户显示的任何布局中的所有 View 。为了实现它,使用了下面发布的代码,但正如您在布局中看到的那样,它包含
Button
LinearLayout
Button
Button
TextView
LinearLayout
当代码执行时,它说布局只有 4 个小部件“Button、LinearLayout、TextView、LinearLayout”,而我预计代码会返回 6 个小部件。 您能告诉我如何获取包含子小部件/ View 的布局中包含的总小部件吗?
代码:
public class ActMain extends AppCompatActivity {
private static final String TAG = ActMain.class.getSimpleName();
private LinearLayout mMainContainer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_main);
this.mMainContainer = (LinearLayout) findViewById(R.id.actMain_mainContainer);
int totalWidgets = this.mMainContainer.getChildCount();
Log.d(TAG, "totalWidgets:" + totalWidgets);
for (int i = 0; i < this.mMainContainer.getChildCount(); i++) {
View view = mMainContainer.getChildAt(i);
}
}
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/actMain_mainContainer"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.alten.test_traversethroughaview_1.ActMain">
<Button
android:id="@+id/actMain_btn_change"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/decision_change" />
<LinearLayout
android:id="@+id/actMain_linlay_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/actMain_btn_yes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/decision_yes" />
<Button
android:id="@+id/actMain_btn_no"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/decision_no" />
</LinearLayout>
<TextView
android:id="@+id/actMain_tv_display"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/actMain_linlay_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
最佳答案
使用这个方法:
public int getChildrenViews(ViewGroup parent){
int count = parent.getChildCount();
for (int i=0;i<parent.getChildCount();i++){
if (parent.getChildAt(i) instanceof ViewGroup){
count+=getChildrenViews((ViewGroup) parent.getChildAt(i));
}
}
return count;
}
任何你想添加这部分的地方:
if (getWindow().getDecorView().getRootView() instanceof ViewGroup){
getChildrenViews((ViewGroup) getWindow().getDecorView().getRootView());
}
关于android - 如何获取包括 subview 在内的布局中的 View 总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44869191/