EditText の拡張として定義したクラスがあります。これを使用して、右揃えのヒントが表示されないという問題を解決します。そこで、ヒントを内部的に実装する独自のコードを作成しました。
特に、getText メソッドをオーバーライドして、値がヒントと等しい場合に null を返すようにします。問題は、 getText がノンストップで呼び出されていることです。再帰的には呼び出されません。そこにカウンターを置いたところ、次の呼び出しを実行する前に、1 つの呼び出しを確実に終了しています。
@Override
public Editable getText(){
depth++;
calls++;
Log.d("RightJustifiedEditText","getText - start. Depth = " + depth + " calls = " + calls);
Editable result = (isEmpty?Editable.Factory.getInstance().newEditable(hint):super.getText());
depth--;
Log.d("RightJustifiedEditText","getText - return: " + result + " Depth = " + depth);
return result;
}
これを実行すると、「深さ」の値が 1 と表示され、毎回 0 と表示されます。「通話」の価値は上がり続けています。
「super.getText()」を削除してその場所に定数を配置すると、問題ないようです。
デバッグ トレースで確認できることから、レイアウトから呼び出されます。
RightJustifiedEditText.getText() line: 115
RightJustifiedEditText(EditText).getText() line: 48
RightJustifiedEditText(TextView).getSelectionStart() line: 5892
RightJustifiedEditText(TextView).onDraw(Canvas) line: 4057
RightJustifiedEditText(View).draw(Canvas) line: 6880
RelativeLayout(ViewGroup).drawChild(Canvas, View, long) line: 1646
RelativeLayout(ViewGroup).dispatchDraw(Canvas) line: 1373
TextFieldElement(ViewGroup).drawChild(Canvas, View, long) line: 1644
TextFieldElement(ViewGroup).dispatchDraw(Canvas) line: 1373
LinearLayout(ViewGroup).drawChild(Canvas, View, long) line: 1644
LinearLayout(ViewGroup).dispatchDraw(Canvas) line: 1373
DoctorSearchElement(ViewGroup).drawChild(Canvas, View, long) line: 1644
DoctorSearchElement(ViewGroup).dispatchDraw(Canvas) line: 1373
LinearLayout(ViewGroup).drawChild(Canvas, View, long) line: 1644
LinearLayout(ViewGroup).dispatchDraw(Canvas) line: 1373
ScrollView(ViewGroup).drawChild(Canvas, View, long) line: 1644
ScrollView(ViewGroup).dispatchDraw(Canvas) line: 1373
ScrollView(View).draw(Canvas) line: 6986
ScrollView(FrameLayout).draw(Canvas) line: 357
ScrollView.draw(Canvas) line: 1409
RelativeLayout(ViewGroup).drawChild(Canvas, View, long) line: 1646
RelativeLayout(ViewGroup).dispatchDraw(Canvas) line: 1373
RelativeLayout(View).draw(Canvas) line: 6883
FrameLayout(ViewGroup).drawChild(Canvas, View, long) line: 1646
FrameLayout(ViewGroup).dispatchDraw(Canvas) line: 1373
FrameLayout(View).draw(Canvas) line: 6883
FrameLayout.draw(Canvas) line: 357
LinearLayout(ViewGroup).drawChild(Canvas, View, long) line: 1646
LinearLayout(ViewGroup).dispatchDraw(Canvas) line: 1373
PhoneWindow$DecorView(ViewGroup).drawChild(Canvas, View, long) line: 1644
PhoneWindow$DecorView(ViewGroup).dispatchDraw(Canvas) line: 1373
PhoneWindow$DecorView(View).draw(Canvas) line: 6883
PhoneWindow$DecorView(FrameLayout).draw(Canvas) line: 357
PhoneWindow$DecorView.draw(Canvas) line: 1862
ViewRoot.draw(boolean) line: 1522
ViewRoot.performTraversals() line: 1258
ViewRoot.handleMessage(Message) line: 1859
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 3683
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 507
ZygoteInit$MethodAndArgsCaller.run() line: 839
ZygoteInit.main(String[]) line: 597
NativeStart.main(String[]) line: not available [native method]
これは、それを直接含むレイアウトです:
<?xml version="1.0" encoding="UTF-8"?>
<com.applicat.meuchedet.views.RightJustifiedEditText
android:id="@+id/text_field_element_text_field"
android:layout_width="170dip"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:textColor="@color/text_field_color"
android:textSize="14sp"
android:layout_marginRight="5dip"
android:paddingLeft="15dip"
android:paddingRight="15dip"
android:gravity="right|center_vertical"
android:inputType="text"
android:lines="1"
android:scrollHorizontally="true"
android:ellipsize="end"
android:background="@drawable/text_field_bg"
/>
<TextView
android:id="@+id/text_field_element_prompt"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:gravity="center_vertical|right"
android:layout_centerVertical="true"
android:textSize="16sp"
android:singleLine="true"
/>