LinearLayout
2 つのEditText
子孫 (直接の子ではない) があります。それぞれのs のEditText.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.xyz,0)
右側にドローアブル (同じドローアブル) を配置するようにそれぞれに要求します。EditText
2 つの編集テキストは、 での順序を除いて同一ですListView
。ただし、ドローアブルEditText
を追加すると、最初のドローアブルのサイズが2番目よりも大きくなります。具体的には、最初のEditText
サイズはドローアブルの固有のサイズに合わせてサイズ変更されますが、2 番目のサイズは変更されEditText
ません (多少大きくなりますが)。
2 つのほぼ同一のビューで同じドローアブルが 2 つ表示されるのはなぜですか?
また、ドローアブルを強制しないようにする方法を考え出すことで、この問題を解決できましたEditText to resize
。ご覧のとおり、背景のスケールの作成に関してhttps://developer.android.com/guide/topics/resources/drawable-resource.html#LayerListの指示に従いましたが、それではうまくいかないようです騙す。
コード:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<TextView
style="@style/fieldLabel"
android:text="phone number"/>
<EditText
android:id="@+id/contactPhoneField"
android:inputType="phone"
android:layout_width="fill_parent"
style="@style/editableField"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<TextView
style="@style/fieldLabel"
android:text="e-mail address"/>
<EditText
android:id="@+id/contactEmailField"
android:inputType="textEmailAddress"
android:layout_width="fill_parent"
style="@style/editableField"/>
</LinearLayout>
ドローアブル:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle">
<gradient
android:startColor="#FFD060"
android:endColor="#FFBB33"
android:angle="270"/>
<padding android:left="5dp" android:top="5dp"
android:right="5dp" android:bottom="5dp" />
<corners android:radius="5dp" />
<stroke android:width="2dp" android:color="#FF8800"/>
</shape>
</item>
<item android:drawable="@drawable/warn"/><!-- a 35x35 px png which is taller than the native height of an EditText-->
</layer-list>
その後、ある時点で次のように呼び出します。
contactPhoneField.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.error_background, 0);
contactEmailField.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.error_background, 0);
さらに、その後EditText.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.xyz,0)
(初めて呼び出した後) を呼び出すたびに、 firstEditText
のサイズが 2 番目のサイズEditText
とドローアブル サイズの一致の間で切り替わります。