【问题标题】:Put ProgressBar in CENTER of the screen programmatically以编程方式将 ProgressBar 放在屏幕的中心
【发布时间】:2014-01-27 10:18:40
【问题描述】:

我正在创建一个扩展 LinearLayout 的课程。我正在尝试以编程方式进行布局。这是我到目前为止所做的:

RelativeLayout.LayoutParams parentParam = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.MATCH_PARENT,
            RelativeLayout.LayoutParams.MATCH_PARENT);

    this.setLayoutParams(parentParam);
    this.setOrientation(LinearLayout.VERTICAL);

    WebView webView = new WebView(context);
    LinearLayout.LayoutParams webViewParam = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.MATCH_PARENT);

    webView.setLayoutParams(webViewParam);
    this.addView(webView);

    pb = new ProgressBar(context);
    LinearLayout.LayoutParams pbParam = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    pbParam.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL;
    pb.setLayoutParams(pbParam);
    webView.addView(pb);

我的一切工作正常,WebViewProgressBar 可见并在那里执行相应的任务,但我试图将 ProgressBar 放在屏幕的 CENTER 中。

我在这里错过了什么。任何形式的意见都将受到赞赏。

编辑: 现在的输出如下所示:

【问题讨论】:

  • 你在输出中得到什么,在这里发布。
  • 为什么要在webview中添加pb?您应该将 pb 添加到 this.addView
  • @PratikButani 添加图片
  • @blackbelt 因为我要在webview中加载一些内容,所以我需要在那里显示进度条。
  • 我认为是RelativeLayout的问题。您必须以编程方式设置 android:layout_centerHorizontal="true"android:layout_centerVertical="true"

标签: android android-layout progress-bar


【解决方案1】:

这是我为将ProgressBar 带到中心所做的操作。我已将ScrollView 用于我的目的。这是我使用的代码:

RelativeLayout.LayoutParams parentParam = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.MATCH_PARENT,
            RelativeLayout.LayoutParams.MATCH_PARENT);

    this.setLayoutParams(parentParam);
    this.setOrientation(LinearLayout.VERTICAL);

    scrollView = new ScrollView(context);
    scrollView.setLayoutParams(new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.MATCH_PARENT,
            Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL));
    scrollView.setFillViewport(true);

    scrollView.setBackgroundColor(Color.TRANSPARENT);

    pb = new ProgressBar(context);
    LinearLayout.LayoutParams pbParam = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    pb.setLayoutParams(pbParam);

    RelativeLayout rel = new RelativeLayout(context);
    RelativeLayout.LayoutParams relParam = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT);
    relParam.addRule(RelativeLayout.CENTER_IN_PARENT);
    rel.addView(pb, relParam);

    scrollView.addView(rel);

    webView = new WebView(context);
    LinearLayout.LayoutParams webViewParam = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.MATCH_PARENT);
    webViewParam.gravity = Gravity.CENTER_HORIZONTAL
            | Gravity.CENTER_VERTICAL;
    webView.setLayoutParams(webViewParam);

    this.addView(scrollView);

    this.addView(webView);  

希望,这会帮助其他正在尝试同样事情的人。

【讨论】:

    【解决方案2】:
    // try this way
    1. Custom Linear Layout
    public class MyCustomLinearLayout extends LinearLayout {
        private FrameLayout frameLayout;
        private ProgressBar pb;
        private  WebView webView;
        public MyCustomLinearLayout(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init(context);
        }
    
        public MyCustomLinearLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context);
        }
    
        public MyCustomLinearLayout(Context context) {
            super(context);
            init(context);
        }
    
        private void init(Context mContext) {
            frameLayout = new FrameLayout(mContext);
            frameLayout.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
            webView = new WebView(mContext);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.getSettings().setPluginState(WebSettings.PluginState.ON);
            webView.getSettings().setSupportZoom(true);
            webView.getSettings().setBuiltInZoomControls(true);
            webView.setWebChromeClient(new WebChromeClient() {
                @Override
                public void onProgressChanged(WebView view, int newProgress) {
                    super.onProgressChanged(view, newProgress);
                    if (newProgress >= 1) {
                        pb.setVisibility(View.VISIBLE);
                    }
                    if (newProgress == 100) {
                        pb.setVisibility(View.GONE);
                    }
                }
            });
            webView.setWebViewClient(new WebViewClient());
            webView.loadUrl("http://www.google.com");
            frameLayout.addView(webView);
            pb = new ProgressBar(mContext);
            FrameLayout.LayoutParams parms = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
            parms.gravity = Gravity.CENTER;
            frameLayout.addView(pb,parms);
            addView(frameLayout);
        }
    
    
    }
    

    【讨论】:

      【解决方案3】:
          LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(150, 150);
          lp.weight = 1.0f;
          lp.gravity = Gravity.CENTER;
      
          ProgressBar pDialog = new ProgressBar(currentActivity);
          pDialog.setIndeterminateDrawable(currentActivity.getResources().getDrawable(R.drawable.progressload));
      
          LinearLayout ll = new LinearLayout(currentActivity);
          ll.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
          ll.setOrientation(LinearLayout.VERTICAL);
          ll.addView(pDialog, lp);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多