如何获得Chid Layout的孩子?

时间:2017-10-21 05:00:22

标签: java android android-layout

我尝试在加载时获取当前活动中的所有WebView元素,然后获得输出 它工作得很好。

代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.dmp_webview.MainActivity"
    android:orientation="vertical">

       <WebView
            android:id="@+id/simpleWebView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginTop="20dp"
            android:scrollbars="none" />

       <WebView
            android:id="@+id/simpleWebView2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginTop="20dp"
            android:scrollbars="none" />
</LinearLayout>
private void forWebviews() {

    final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

    int elementSize = getWenViews(viewGroup).size();
    for(int j =0; j< elementSize;j++)
    {           
        WebView getAllWebView = formIsValid(viewGroup).get(j);
        String SplitTypeWebView = String.valueOf(getAllWebView);
        String getWebValues = getAllWebView.getUrl().toString();
        SplitWebViewID(SplitTypeWebView);
     }  
}

    private ArrayList<WebView> getWenViews(ViewGroup viewGroup) {

        ArrayList<WebView> webview = new ArrayList<WebView>();
        for (int i = 0; i < viewGroup.getChildCount(); i++) {
            View v = viewGroup.getChildAt(i);
            if (v instanceof WebView) {
                webview.add((WebView) v);
            }
        }
        return webview;
    }

但是,当我再次使用LinearLayout(不仅是其他布局的线性布局)时,webview parent就像这样,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.dmp_webview.MainActivity"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff"
        android:orientation="vertical"
        android:padding="16dp"
        android:id="@+id/RootLayout_1">

           <WebView
                android:id="@+id/simpleWebView"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_marginTop="20dp"
                android:scrollbars="none" />

           <WebView
                android:id="@+id/simpleWebView2"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_marginTop="20dp"
                android:scrollbars="none" />

     </LinearLayout>

</LinearLayout>

它无法正常工作。为什么?它将不返回子视图计数。我需要澄清一件事。

  • 是否可以获取所有子布局的子项。 (例如)     ROOT LAYOUT - &gt; LinearLayout(其他一些布局) - &gt; LinearLayout(其他一些布局)-Views

plz指导我。实际上我得到root布局并迭代。 如何在运行时获取所有子视图?有多少根布局或子布局或视图无关紧要。我需要得到所有。

1 个答案:

答案 0 :(得分:0)

  

需要获取所有视图(如果可能的话,无论是viewgroup / webview还是意味着还需要它们)

您可以使用递归方法。

以下是一个例子:

private static void getViews(list, ViewGroup viewGroup){
    for(int i = 0; i < viewGroup.getChildCount(); i++){
        View view = viewGroup.getChildAt(i);
        list.add(view);
        if(view instanceof ViewGroup){
            getViews((ViewGroup) view);
        }
    }
}

以下是你如何称呼它。

List<View> list = new ArrayList<View>();
getViews(list, (ViewGroup) this.findViewById(android.R.id.content));

如果您想过滤WebView,您可以执行以下操作:

List<WebView> webViews = new ArrayList<WebView>();
for(View view : list){
    if(view instanceof WebView){
        webViews.add((WebView) view);
    }
}