java - 在 Android 中为 LinearLayout 添加边距

标签 java android layoutparams

我在设置边距时遇到了一些问题!

body_content = (LinearLayout) findViewById(R.id.body_content);

int gSLength = 2;
 body_content.setPadding(10, 0, 10, 0);

for (int i = 0; i < 1; i++){
   FrameLayout fl = new FrameLayout(this);
   LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, 90);
   fl.setLayoutParams(params);

   LinearLayout ll1 = new LinearLayout(this);
   LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 30);
   params1.setMargins(0, 60, 0, 0);
   ll1.setLayoutParams(params1);
   ll1.setBackgroundDrawable(getResources().getDrawable(R.drawable.line_down));
   fl.addView(ll1);

   body_content.addView(fl);
}

它不起作用 params1.setMargins (0, 60, 0, 0);

最佳答案

首先,Sherif 的评论是正确的:params1 应该是 FrameLayout.LayoutParams 而不是 LinearLayout.LayoutParams 的实例。
原因很简单:ll1 是 FrameLayout 的子级,因此它必须采用 FrameLayout 子级的布局参数。

第二件事是 FrameLayout 严重依赖于 gravity 属性。为 FrameLayout 子项创建布局参数的新实例时,gravity is set to -1默认情况下(这是一个无效的重力值)。如果 child 的重力设置为-1,则整个边距计算得到skipped。在计算布局时。这意味着任何设置的 margin 值都会被忽略。

那怎么解决呢?很简单,在设置边距时为重力设置一个正确的值:

LinearLayout.LayoutParams params1 = 
                    new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 30);
params1.gravity = Gravity.TOP;
params1.setMargins(0, 60, 0, 0);

那应该行得通。但是您选择的布局尺寸表明您希望将子 LinearLayout 放置在 FrameLayout 的底部。这可以通过将重力设置为底部来实现,在这种情况下您可以跳过设置边距。

LinearLayout.LayoutParams params1 = 
                    new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 30);
params1.gravity = Gravity.BOTTOM;

关于java - 在 Android 中为 LinearLayout 添加边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154716/

相关文章:

java - 使用 Gson 将 JSON 转换为 Java 对象

java - 键入 DefaultListModel 以避免强制转换

android - Dagger 2 : cannot be provided without an @Inject constructor or from an @Provides-annotated method

android - 如何在android中的actionbar文本顶部添加图标

java - 以编程方式将 TableRows 插入 TableLayout - TableRow 内的 TextView 将不会显示

android - view.getLayoutParams().width 不适用于牛轧糖

java - Web 组件 WEB-INF LIB 应该在 war 文件中包含什么 jar

java - 如何捕获Hibernate DB连接错误异常?

android - 使用 Retrofit 2 从响应 JSON 获取单个 JSON 属性值

Android 系统叠加层未显示在我的应用程序外部