如何以编程方式设置edittext的布局高度

时间:2013-04-05 13:50:17

标签: android android-layout

我正在尝试以编程方式设置自定义EditText组件的高度,但没有成功。我有一个继承自EditText的自定义类,用于设置自定义字体。 我想更新EditText的高度和填充,但我的所有意图都不会更新它。只有当我在XML文件中设置高度时,才会更新高度。

这里是XML:

<example.ui.customcontrols.CustomEditText
    android:id="@+id/txtUsername"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="2dip"
    android:layout_marginTop="2dip"
    android:inputType="text"
    android:singleLine="true" />

此处是自定义EditText的代码:

public class CustomEditText extends EditText {
    public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.init();
    }
    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.init();
    }
    public CustomEditText(Context context) {
        super(context);
        this.init();
    }
    public void init() {
        UIHelper.setTypeface(this);
        this.setTextSize(17);

        // This is not working.
        this.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT, 10));
        this.setPadding(this.getPaddingLeft(), 0, this.getPaddingRight(), 0);
    }
}

我见过一个similar post,使用相同的,但我无法使其正常工作。

更新

鉴于快速反应,请找出对该情景的澄清:

  1. 我有很多EditText,它们是在活动布局中动态添加的。我需要从自定义控件,而不是从活动中执行此操作。我正在EditText中寻找正确的事件(如onDraw,onPredraw等),以便读取和设置layoutparams。如果您发现适当的事件被覆盖,请告诉我。再来一次!
  2. getLayoutParams在视图的构造函数(EditText)中返回null。因此,我认为解决方案可能会在实例化布局时解决正确的事件。
  3. 到目前为止,我已经尝试并阅读了很多事件,比如onDraw,onLayout,onFinishInflate等。但是param会被忽略,或者会产生异常。
  4. 获取当前答案的答案,以及任何进一步答案的TIA!

    米尔顿。

2 个答案:

答案 0 :(得分:1)

尝试从布局中执行此操作,其中包含CustomEditText。例如:

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
    >
<com.example.untitled1.CustomEditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello World, MyActivity"
        android:id="@+id/et"
        />

MyActivity.java

public class MyActivity extends Activity {

private CustomEditText et;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    et= (CustomEditText) findViewById(R.id.et);
    ViewGroup.LayoutParams lp = et.getLayoutParams();
    lp.width = 100;
    lp.height = 100;
    et.setLayoutParams(lp);
}

}

像魅力一样工作!

答案 1 :(得分:0)

   LayoutParams params = layout.getLayoutParams();
 // Changes the height and width to the specified *pixels*
 params.height = 100;
 params.width = 100;