EditText无缘无故地调整大小

时间:2012-07-11 19:37:41

标签: java android

在相对布局中观察到相当奇怪的行为。

这是初始状态: enter image description here

定义为:

<EditText
    android:id="@+id/bleedCount"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@+id/abrMult"
    android:layout_below="@+id/textView4"
    android:layout_marginRight="10dp"
    android:ems="10"
    android:inputType="number"
    >
    <requestFocus />
</EditText>

<TextView
    android:id="@+id/abrMult"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/abrSubmit"
    android:layout_alignBaseline="@+id/abrSubmit"
    android:layout_marginRight="10dp"
    android:text="x12" />

<Button
    android:id="@+id/abrSubmit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView4"
    android:layout_alignParentRight="true"
    android:text="Calculate" />

在下拉列表的onItemSelected上,它会像这样更改:

abrSubmit.setText(pos == 1 ? "Calculate" : "Submit");
abrMult.setVisibility(pos == 1 ? View.VISIBLE : View.GONE);
bleedCount.setHint(pos == 1 ? "# of Meow/month" : "# of Meow/year");

然后变成这样:
enter image description here

注意EditText bleedCount如何在第二张图片上更高。 bleedCount.getHeight()的值从72变为95,我无法理解导致它的原因。

3 个答案:

答案 0 :(得分:2)

它与android:ems="10"相关联 当EditText改变它的宽度后,在显示x12的视图后,它必须被分成两行。

对于给定的字体,

ems的大小为一个字母。

我认为你不需要ems 将EditText设置为单行:android:singleLine="true"

答案 1 :(得分:1)

bleedCount EditText调整大小是由于您的提示文字在(pos == 1)时变得比单行更长。

如果您在代码中注释掉以下行,则调整大小将停止发生:

// bleedCount.setHint(pos == 1 ? "# of Meow/month" : "# of Meow/year");

也许你可以make it shorter/smaller阻止调整大小?

答案 2 :(得分:0)

好的,因为我没有完整的代码库,所以我将一些简单的东西放在一起来复制你正在做的事情。仅供参考,我正在使用ICS 4.1。我没有遇到任何问题,所以这可能是一个API问题。也许你可以查看我的代码库,看看它和你自己的代码有什么不同。其中可能存在解决方案。

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_rl"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Top TextView" />

<Spinner
    android:layout_below="@+id/textView4"
    android:id="@+id/spinner1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<TextView
    android:layout_below="@+id/spinner1"
    android:id="@+id/textView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Above EditText" />

<EditText
    android:id="@+id/bleedCount"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textView5"
    android:layout_marginRight="10dp"
    android:layout_toLeftOf="@+id/abrMult"
    android:ems="10"
    android:inputType="number" >
</EditText>

<TextView
    android:id="@+id/abrMult"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView5"
    android:layout_alignBaseline="@+id/abrSubmit"
    android:layout_marginRight="10dp"
    android:layout_toLeftOf="@+id/abrSubmit"
    android:text="x12"
    android:visibility="gone" />

<Button
    android:id="@+id/abrSubmit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/textView5"
    android:text="Submit" />

</RelativeLayout>

代码:

public class ExampleActivity extends Activity implements OnItemSelectedListener {

private Button submitButton;
private TextView tv;
private Spinner spinner;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_example);

    submitButton = (Button) findViewById(R.id.abrSubmit);
    tv = (TextView) findViewById(R.id.abrMult);
    spinner = (Spinner) findViewById(R.id.spinner1);

    // create the data array for the spinner
    String[] strings = { "This", "That", "The Other" };

    // create the spinner adapter
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, strings);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // set the adapter on the spinner
    spinner.setAdapter(adapter);

    // set the event listener for the spinner
    spinner.setOnItemSelectedListener(this);
}

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    if (submitButton.getText().equals("Calculate")) {
        submitButton.setText("Submit");
        tv.setVisibility(View.GONE);
    } else {
        submitButton.setText("Calculate");
        tv.setVisibility(View.VISIBLE);
    }

}

public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
}
}

希望它有所帮助...