在相对布局中观察到相当奇怪的行为。
这是初始状态:
定义为:
<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");
然后变成这样:
注意EditText bleedCount
如何在第二张图片上更高。 bleedCount.getHeight()
的值从72变为95,我无法理解导致它的原因。
答案 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
}
}
希望它有所帮助...