FrameLayout.LayoutParams 设置左下角?
时间: 2024-05-12 08:13:37 浏览: 17
你可以使用 `Gravity` 属性来设置 `FrameLayout` 子视图的位置。要将子视图设置为左下角,可以使用以下代码:
```java
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT
);
layoutParams.gravity = Gravity.BOTTOM | Gravity.LEFT;
yourView.setLayoutParams(layoutParams);
```
这将把 `yourView` 放置在 `FrameLayout` 的左下角。
相关问题
FrameLayout.LayoutParams与LinearLayout.LayoutParam的区别
`FrameLayout.LayoutParams` 和 `LinearLayout.LayoutParams` 都是布局参数类,它们有一些不同的属性和用途。
`FrameLayout.LayoutParams` 是用于 `FrameLayout` 布局的参数类,它可以设置子视图相对于父视图的位置和大小。`FrameLayout` 是一种简单的布局,它只允许一个子视图占据整个布局,所以 `FrameLayout.LayoutParams` 只有 `width`、`height` 和 `gravity` 三个属性。
`LinearLayout.LayoutParams` 是用于 `LinearLayout` 布局的参数类,它可以设置子视图在布局中的位置和大小。`LinearLayout` 是一种比较常用的布局,它可以将子视图按照水平或垂直方向排列,所以 `LinearLayout.LayoutParams` 有更多的属性,比如 `gravity`、`weight`、`layout_weight`、`layout_gravity` 等。
总的来说,`FrameLayout.LayoutParams` 更加简单,适合用于只有一个子视图的布局;`LinearLayout.LayoutParams` 更加灵活,适合用于多个子视图的布局。在使用布局参数类时,需要根据实际情况选择适合的参数类。
mCandidatesFrame.addView(view, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 不显示
如果调用 `mCandidatesFrame.addView(view, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));` 后不显示,可以检查以下几点:
1. 父容器 `mCandidatesFrame` 是否已经添加到布局中。如果没有添加到布局中,子视图是不会显示的。
2. `view` 的可见性是否为 `VISIBLE`。如果可见性为 `GONE`,子视图是不会显示的。
3. `view` 的宽高是否正确。如果宽高为0或者不正确,子视图也是不会显示的。
4. 如果 `view` 是 `TextView` 或者 `EditText` 等可输入控件,需要设置 `view` 的输入法类型,否则可能会导致无法显示。可以尝试在 `view` 上调用 `setRawInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS)` 方法。
如果以上方法都不能解决问题,可以尝试使用 `ViewGroup.post()` 方法在视图绘制完成后再添加子视图。例如:
```
mCandidatesFrame.post(new Runnable() {
@Override
public void run() {
mCandidatesFrame.addView(view, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
}
});
```
这样可以确保在视图绘制完成后再添加子视图,避免出现显示问题。