我想简单地将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中。)
答案 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中设置的值不会被忽略。
尽管如此,我还没有抬头看是否按设计工作或只是一个小问题......