【问题标题】:Webview in programmatically created RelativeLayout以编程方式创建的 RelativeLayout 中的 Webview
【发布时间】:2012-06-28 16:17:08
【问题描述】:

我需要在代码中生成以下xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical" android:gravity="right"
            android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00000000"
            >
            <android.webkit.WebView android:layout_width="fill_parent"
            android:id="@+id/adview"
            android:scrollbars="none"
            android:layout_height="50dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentBottom="true"
            ></android.webkit.WebView>
            <Button android:layout_width="wrap_content" android:text="x" android:textColor="#000000" 
            android:layout_height="wrap_content" android:id="@+id/hide_popup_button" android:background="#00000000" 
            android:layout_alignTop="@+id/adview" android:layout_alignParentRight="true"></Button>

        </RelativeLayout> 

我使用下面的代码,但我得到了Force close

RelativeLayout popwindow=new RelativeLayout(this);

        RelativeLayout.LayoutParams rl= new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 50);
        popwindow.setLayoutParams(rl);
        WebView w= new WebView(this);
        w.setId(0X100);
        w.setScrollContainer(false);
        android.widget.RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)w.getLayoutParams();
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        Button b=new Button(this);
        b.setId(0X101);
        b.setText("X");
        b.setBackgroundColor(Color.TRANSPARENT);
        b.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        android.widget.RelativeLayout.LayoutParams paramsbut = (RelativeLayout.LayoutParams)b.getLayoutParams();
        paramsbut.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        paramsbut.addRule(RelativeLayout.ALIGN_TOP,w.getId() );
        popwindow.addView(w,params);
        popwindow.addView(b,paramsbut);
        setContentView(popwindow);

我需要有关如何通过 java 代码制作该 xml 布局的建议。

【问题讨论】:

  • 尝试 LayoutParams param = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); w.setLayoutParams(参数);而不是 android.widget.RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)w.getLayoutParams();
  • "get force close" post log cat 也是如此..
  • 如果我编辑以改进您的问题,请不要还原更改。

标签: android android-layout android-webview


【解决方案1】:

您应该发布您在问题中遇到的任何异常。看看这是否有帮助:

    RelativeLayout popwindow=new RelativeLayout(this);
    FrameLayout.LayoutParams rl= new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, 50);
    popwindow.setLayoutParams(rl);
    WebView w= new WebView(this);
    w.setId(0X100);
    w.setScrollContainer(false);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, 50);
    params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    w.setLayoutParams(params);
    Button b=new Button(this);
    b.setId(0X101);
    b.setText("X");
    b.setBackgroundColor(Color.TRANSPARENT);
    RelativeLayout.LayoutParams bparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, ReloativeLayout.LayoutParams.WRAP_CONTENT);
    bparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    bparams.addRule(RelativeLayout.ALIGN_TOP, w.getId());
    b.setLayoutParams(bparams);        
    popwindow.addView(w);
    popwindow.addView(b);
    setContentView(popwindow);

包含WebViewButton 的自定义组件:

public class CustomRelativeLayout extends RelativeLayout {

        private WebView mWebView;
        private Button mButton;

        public CustomRelativeLayout(Context context) {
            super(context);
            mWebView = new WebView(context);
            mWebView.setId(0X100);
            mWebView.setScrollContainer(false);
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.FILL_PARENT, 50);
            params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            mWebView.setLayoutParams(params);
            mButton = new Button(context);
            mButton.setId(0X101);
            mButton.setText("X");
            mButton.setBackgroundColor(Color.TRANSPARENT);
            RelativeLayout.LayoutParams bparams = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            bparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
            bparams.addRule(RelativeLayout.ALIGN_TOP, mWebView.getId());
            mButton.setLayoutParams(bparams);
            addView(mWebView);
            addView(mButton);
        }

        public WebView getTheWebView() {
            return mWebView;
        }

        public Button getTheButton() {
            return mButton;
        }

    }

要使用该组件:

CustomRelativeLayout popWindow = new CustomRelativeLayout(this);
    FrameLayout.LayoutParams rl= new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, 50);
setContentView(popWindow);
// get a reference to the WebView and the Button
WebView w = popWindow.getTheWebView();
Button b = popWindow.getTheButton(); 

【讨论】:

  • @Shalini 你想创建一个自定义组件来保存你的 WebView + 按钮,然后在你的活动中使用该组件吗?
  • 是的。我在另一个类中使用上面的代码扩展了该布局并在主类中使用按钮和 webview
  • 感谢您抽出宝贵的时间。我现在就试试:)
  • 我通过您的代码获得了按钮和网页视图。但现在我怎样才能获得整个布局并在主类中引用它。例如:TransparentPanel tp=(TransparentPanel) findViewById(thatlayourhere?);
  • @Shalini 像 &lt;com.your.package.CustomRelativeLayout android:id="@+id/the_id" //other attributes /&gt; 这样将自定义组件放置在您的布局中,然后使用 findViewById 在代码中引用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2011-04-28
相关资源
最近更新 更多