如何动态设置EditText高度

时间:2010-11-25 08:00:42

标签: android

我想简单地将EditText组件的高度设置为用户屏幕高度的50%。

我正在从一个xml文件(main.xml)创建初始布局,该文件加载在Activity的onCreate(Bundle)中。从xml配置,我理解如何将EditText高度设置为文字值,例如android:layout_height =“150dip”,并且从onCreate(Bundle),我明白我可以在EditText组件上调用setHeight(int) ,但是对setHeight(int)的调用似乎被忽略了,如果我在xml中没有layout_height设置,那么当我的应用程序启动时会出现异常,抱怨高度值是必需的(和app一样)管芯)。

有没有办法根据用户的屏幕高度设置xml的高度?换句话说,在xml中,是否可以检索用户的屏幕高度并使用它来计算组件的值?

(我将EditText放在一个垂直方向的LinearLayout中。)

3 个答案:

答案 0 :(得分:5)

使用线性布局,将EditText的权重设置为1,然后添加另一个空视图并将其权重设置为1。

答案 1 :(得分:0)

在Java中你可以试试这个:

package com.stackoverflow.q4274819;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.LinearLayout;

public class Q4274819 extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DisplayMetrics metrics = new DisplayMetrics();
        WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        wm.getDefaultDisplay().getMetrics(metrics);
        final float height = metrics.heightPixels;

        EditText e = (EditText) findViewById(R.id.edit);
        e.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, (int) (height/2)));

        LinearLayout l = (LinearLayout) findViewById(R.id.layout);
        l.requestLayout();
    }
}

给定布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <EditText android:id="@+id/edit"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="@string/hello"
            />
</LinearLayout>

答案 2 :(得分:0)

感谢您的回复。我想出了别的东西。

在xml中,而不是指定文字数值,例如“200dip”,对于android:layout_height,如果只使用“fill_parent”,那么调用setHeight(int)的Activity中设置的值不会被忽略。

尽管如此,我还没有抬头看是否按设计工作或只是一个小问题......