Android 忽略了我的 setWidth() 和 setHeight()

Posted

技术标签:

【中文标题】Android 忽略了我的 setWidth() 和 setHeight()【英文标题】:Android ignoring my setWidth() and setHeight() 【发布时间】:2010-05-04 12:46:08 【问题描述】:

那么,为什么会出现这样的代码:

package org.popoffka.apicross;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;

public class Game extends Activity 
 @Override
 protected void onCreate(Bundle savedInstanceState) 
     super.onCreate(savedInstanceState);
     Button testButton = new Button(this);
     testButton.setBackgroundResource(R.drawable.cell);
     testButton.setWidth(20);
     testButton.setHeight(20);
     setContentView(testButton);
 

...产生这个东西: http://i42.tinypic.com/2hgdzme.png 即使代码中有 setWidth(20) 和 setHeight(20) ? (R.drawable.cell 实际上是一个 20x20 的 PNG 图像,其中包含一个带有银色边框的白色单元格)

【问题讨论】:

【参考方案1】:

设置 View 的宽度和高度的正确方法是通过 LayoutParams 进行。请参阅 ViewGroup.LayoutParams 和 View.getLayoutParams()。

【讨论】:

【参考方案2】:

您将按钮设置为内容视图,这意味着您将其用作“根容器”。

您应该将 Button 添加到适当的布局中,然后将布局设置为内容视图。

想一想,按钮的侧面有什么?没有组件会覆盖该区域,UI 也不可能知道在这些区域渲染什么。

【讨论】:

实际上可以创建按钮并使其不覆盖整个屏幕。但是在这个例子中,popoffka 忘记给他的按钮一组 LayoutParams,导致 Android 选择了默认的 LayoutParams。 Activity 的根布局是 FrameLayout,FrameLayout 中的默认布局参数是 FILL_PARENT/FILL_PARENT。 啊哈。有趣的。我不知道。所以基本上我的帖子是无效的?【参考方案3】:

我知道这是一个迟到的答案,但希望它对某人有所帮助。

这是因为 Button 默认的最小宽度为 64dip。在设置宽度之前将其设置为 0。

b.setMinimumWidth(0);

其他最佳做法是使用 LayoutParams

【讨论】:

以上是关于Android 忽略了我的 setWidth() 和 setHeight()的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 忽略媒体查询

Android中动态设置TextView的宽高

为啥 Spring 忽略了我的 @DependsOn 注释?

为啥 Azure DevOps / TFS 中忽略了我的 repositoryPath?

解释哪个 gitignore 规则忽略了我的文件

UIImageView 忽略了我的 ContentMode 设置