【发布时间】:2018-04-02 06:44:29
【问题描述】:
我尝试在加载时获取当前活动中的所有 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;
}
但是,当我为 webview 父级再添加一个 LinearLayout(不仅是 linearlayout 其他布局)时,
<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 -> LinearLayout(一些其他布局)->LinearLayout(一些其他布局)-Views
请指导我。实际上我得到了根布局并迭代。 如何在运行时获取所有子视图?有多少根布局或子布局或视图无关紧要。我需要得到所有。
【问题讨论】:
-
ViewGroup#getChild*()方法仅处理直接子Views,因此您不会在嵌套的ViewGroups 中获得那些WebViews。在getWenViews()中,if需要一个else if,以防孩子是另一个ViewGroup–else if (v instanceof ViewGroup) { webview.addAll(getWenViews((ViewGroup) v)); } -
您是要获取布局中的所有
WebViews 还是特定ViewGroup中的所有WebViews? -
@MikeM。是的,麦克你是对的,它只会获得直接的子视图,根据逻辑我需要添加 else if 检查其他视图组。我会尝试更新给你
-
@Titus 需要获取所有视图(视图组/网络视图无关紧要,如果可能意味着同时需要这两个视图)
-
谢谢@MikeM。我忘记了
getAll()。
标签: java android android-layout