如何在 1 个活动 (android) 中显示 2 个视图?

Posted

技术标签:

【中文标题】如何在 1 个活动 (android) 中显示 2 个视图?【英文标题】:How do I display 2 views in 1 activity (android)? 【发布时间】:2011-01-15 04:37:39 【问题描述】:

假设我打开了一个 webview:

  public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    main_webv = (WebView) findViewById(R.id.mainwebview);
    main_webv.setWebViewClient(new HelloWebViewClient());
    main_webv.getSettings().setjavascriptEnabled(true);
    main_webv.getSettings().setSupportZoom(false);
    main_webv.addJavascriptInterface(new HelloJavascriptInterface(),"hello");
    main_webv.setWebChromeClient(new HelloWebChromeClient());
    main_webv.loadUrl(SPLASH);   
    main_webv.setVisibility( 4 );

    setContentView(R.layout.main_list);         
    main_listv = (ListView) findViewById(R.id.mainlistview);    



我只想在此 webview 上方创建一个 ListView(将其覆盖...但仍允许 webview 运行)。我可以打开和关闭视图。 谢谢。

【问题讨论】:

【参考方案1】:

您可以使用FrameLayout;这样,两个视图都将排列在另一个视图之上。然后,您可以使用 View.setVisibility(..) 方法切换它们的可见性。

[编辑:添加代码]

这是我的布局 XML(weblister.xml):

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:layout_
    >
    <ListView
    android:id="@+id/list_view"
    android:layout_
    android:layout_
    />
    <WebView
    android:id="@+id/webview"
    android:layout_
    android:layout_
    />

</FrameLayout>

现在,我创建了一个 Activity,它的视图层次结构中同时包含 ListView 和 WebView,但其中只有一个是可见的:

public class WebAct extends Activity 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.weblister);

            //setup listview
        ListView listView = (ListView) findViewById(R.id.list_view);
        listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                new String[]"One","Two")

        );
            // setup web view
        WebView webView = (WebView) findViewById(R.id.webview);

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSupportZoom(false);

        webView.loadUrl("http://www.google.com");

            // set visibility    
        listView.setVisibility(View.INVISIBLE);
        webView.setVisibility(View.VISIBLE);
    


注意:代码可能不完整,但我希望它能将我的观点传达给您。

【讨论】:

ListActivity 怎么样?现在,我的课程扩展了 Activity(对于我的 webview)。但我不能同时延长两者。 ListActivity 扩展了 Activity。所以你的类可以扩展 ListActivity 并且里面也有一个 WebView。你只需要一个 ListView 在你的布局文件中,android:name = "@android:id/list"(如果你选择扩展 ListActivity)。另外,为了您的信息,不需要扩展 ListActivity,您可以让您的类扩展 Activity 并在布局文件中同时包含 ListView 和 WebView。 我会看看能不能找到一些代码给你...只是为了让事情更清楚【参考方案2】:

是的,如果您想以编程方式打开 (View.VISIBLE) 和关闭 (VIEW.GONE) 视图,setVisibility 可能会对您有所帮助。

关于您对 Samuhs 回答的评论:在 Java 中,您没有多重继承。但是 ListActivity 继承自 Activity,因此 ListActivity 与 Activity 几乎相同(甚至更多)。

此外,您不必必须使用 ListActivity 来显示 ListView,它只是为处理基于列表的活动提供了一些便利,因为它们非常常见。

你得到的错误究竟是什么?

【讨论】:

+1 冒昧回答 OP 提出的问题

以上是关于如何在 1 个活动 (android) 中显示 2 个视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中正确定义 2 个主要的启动器活动

我如何在 android 中显示从 listView 到第二个活动的相同数据,如果我点击 google,它会在第二个活动中显示 google

如何在当前活动中将搜索结果保存在 ListView (Android) 中

如何在家庭活动android上显示进度对话框?

带有 2 个按钮的 Android 主要活动可在 webview 中打开第二个活动

如何使用导航组件在活动中并排显示 2 个片段 [关闭]