سؤال

انا لدي EditText هذا يدل على الوقت. بعد أن ينقر المستخدم على EditText أريد أن أظهر TimePickerDialog, ، لذلك قمت بتعيين أ View.OnClickListener لي EditText.

لكن ال OnClickListener يتصرف بغرابة - أنا أتطرق إلى EditText ثم تظهر لوحة مفاتيح البرنامج (والتي لا أريدها). عندما أتطرق مرة أخرى ، OnClickListener.onClick() يتم استدعاؤه أخيرًا ويظهر الحوار.

ماذا علي أن أفعل إذا أردت أن يظهر مربع الحوار على الفور؟

هل كانت مفيدة؟

المحلول

على عكس معظم الضوابط الأخرى ، EditTextS قابلة للتركيز بينما يكون النظام في "وضع اللمس". يركز حدث النقر الأول على عنصر التحكم ، في حين أن حدث النقر الثاني يطلق فعليًا 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" 

الذي تم إهماله ولكنه الخدعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top