كيفية القيام بشيء ما بعد نقر المستخدم على edittext
-
22-09-2019 - |
سؤال
انا لدي EditText
هذا يدل على الوقت. بعد أن ينقر المستخدم على EditText
أريد أن أظهر TimePickerDialog
, ، لذلك قمت بتعيين أ View.OnClickListener
لي EditText
.
لكن ال OnClickListener
يتصرف بغرابة - أنا أتطرق إلى EditText
ثم تظهر لوحة مفاتيح البرنامج (والتي لا أريدها). عندما أتطرق مرة أخرى ، OnClickListener.onClick()
يتم استدعاؤه أخيرًا ويظهر الحوار.
ماذا علي أن أفعل إذا أردت أن يظهر مربع الحوار على الفور؟
المحلول
على عكس معظم الضوابط الأخرى ، EditText
S قابلة للتركيز بينما يكون النظام في "وضع اللمس". يركز حدث النقر الأول على عنصر التحكم ، في حين أن حدث النقر الثاني يطلق فعليًا OnClickListener
. إذا قمت بتعطيل التركيز على وضع اللمس مع android:focusableInTouchMode
عرض السمة ، OnClickListener
يجب إطلاق النار كما هو متوقع.
<EditText
android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusableInTouchMode="false" />
نصائح أخرى
حل آخر هو استخدام ontouchlistener
:
edittext.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(MotionEvent.ACTION_UP == event.getAction()) {
mQuaternion_1.setText("" + mQ1);
}
return true; // return is important...
}
});
إذا عاد true
يتم التعامل مع الحدث ولوحة المفاتيح لن تنبثق. إذا كنت تريد أن تظل لوحة المفاتيح منبثقة وتسجيل انقر فوقك ستعود false
.
يبدو أنك لا تريد أن يكون المستخدم قادرًا بالفعل على الكتابة في EditText. أنت فقط تريدهم أن يكونوا قادرين على اختيار وقت عبر منتقي الوقت. فلماذا لا يقتصر على زر ينبثق من timePickerDialog؟ يمكنك عرض الوقت الذي تم اختياره في TextView.
أو يمكنك فقط استبدال عرض EditText بـ timepicker عرض (وليس مربع حوار ، مجرد عرض منتظم).
لقد قمت بحل هذا باستخدام زر مخصص مثل هذا:
<Button
android:id="@+id/btTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="test"
android:textSize="20dp"
android:background="@android:drawable/edit_text" />
بدلاً من لمس مستمع اللمس ، استخدم مستمع تغيير النص:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//yourFunction();
}
@Override
public void afterTextChanged(Editable s) {
}
});
إذا فهمت بشكل صحيح ، فأنت بحاجة فقط إلى شيء مثل
<EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:clickable="true" android:inputType="none" />
غير قابل للتحرير وقابل للنقر. تعيين OnClickListener
إنتهيت. من الناحية النظرية ، في الممارسة يجب أن تضيف أيضًا
android:editable="false"
الذي تم إهماله ولكنه الخدعة.