【问题标题】:How to Add a Child View to the Center of a ViewGroup如何将子视图添加到视图组的中心
【发布时间】:2017-12-13 10:14:45
【问题描述】:

我在this 之后创建了一个自定义循环进度条。现在我想将此进度条添加到布局的中心。问题是它被添加到活动的左上角,无论我如何更改传递给 addView() 的 LayoutParams 属性。代码如下:

// Create a progress bar to display while the list loads
            mProgressBar = new DualProgressView(getApplicationContext());

            ViewGroup root = findViewById(android.R.id.content);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(500, 500, Gravity.CENTER);
            root.addView(mProgressBar,params);

【问题讨论】:

  • 只需在 xml 中使用居中对齐即可。或者如果你想在运行时添加它然后只需根据父布局分配 LayoutParams。
  • android.R.id.content ViewGroup 通常是 FrameLayout,而不是 LinearLayout。不过,您不应该真正依赖它。将您的DualProgressView 添加到您在布局中声明的ViewGroup,这样您就可以确切地知道它是什么,以及使用哪个LayoutParams。顺便说一句,你应该使用 Activity 来代替 DualProgressView 实例化 Context,而不是 getApplicationContext(),这样它就可以应用正确的主题和样式。
  • @ADM 现在我使用了LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(root.getLayoutParams());,它跨越了整个宽度并且不垂直对齐到中心。我不喜欢它。
  • 同意迈克的观点。 @JasonStack 我认为问题出在您的 DualProgressView 上。发布您的 DualProgressView.java

标签: android view viewgroup


【解决方案1】:
  1. 将进度条的高度和宽度设置为 wrap_content,或者说 xml 中的 40sp。
  2. android:layout_gravity="center" 属性设置为 LinearLayout 中的 ProgressBar。

或以编程方式,试试这个:

ViewGroup layout = (ViewGroup) findViewById(android.R.id.content).getRootView();
LinearLayout.LayoutParams params = new 
        LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);

LinearLayout ll = new LinearLayout(thisActivity);

ll.setGravity(Gravity.CENTER);
ll.addView(progressBar);

layout.addView(ll,params);

【讨论】:

  • 进度条居中,但还是太大了。如何以编程方式设置其大小?
  • 你也可以指定进度条的大小,但是这样做:ll.addVIew(progressBar, 30, 30)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多