سؤال

حسنا ، مشكلة غريبة أخرى. لدي نشاط main.java و dialoglikeactivity.java.

في الأساسية أملك

EditText (articleNumber) - phone input type (in .XML)
Button (articleOK)
list (list)

تشغيل الحوار (النشاط ولكن تم تصميمه بموضوع مربع الحوار ومعه Android: WindowsoftInputMode = "StateAlwaysVisible" علامة في البيان) لدي

EditText (articlePackaging) - phone input type (in .XML)
Button (finish)

ماذا اريد؟ عندما أدخل لوحة مفاتيح النشاط الرئيسية مفتوحة مع نوع إدخال الهاتف وهذا جيد. عندما أقوم بالنقر فوق حقل EditText ، قم بملء شيء ما وانقر فوق "موافق" المتغير في الحالة 1 (عرض دائمًا لوحة المفاتيح) - إنه متغير ثابت في النشاط الرئيسي.

public static int keyboardMode = 1;

النقر فوق OK يفتح DialogLikeActivity مع فتح لوحة المفاتيح (نوع إدخال الهاتف). عندما أنقر فوق "موافق" من الركلات الرئيسية

@Override
public void onResume() {
    super.onResume();

    if (keyboardMode == 1) {
        showKeyboard(articleNumber);
    } else {
        hideKeyboard(articleNumber);
    }
}   

public static void showKeyboard(View view) {
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);

    ((InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(view, 0);

    articleNumber.setInputType(InputType.TYPE_CLASS_PHONE);
}

public static void hideKeyboard(View view) {
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.hideSoftInputFromWindow(view.getWindowToken(), 0);

    articleNumber.setInputType(0);
}

// Listener to showKeyboard if user clicks on EditText field and set InputType to PHONE, insted it would remain (0)

    articleNumber.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showKeyboard(articleNumber);
        }
    });

// Listener so when user touches the list - it hides the keyboard and sets variable on 2 so keyboard is always HIDDEN

    list.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            hideKeyboard(articleNumber);
            keyboardMode = 2;

            return false;
        }
    });

// Listener so when user clicks on ArticleOK - keyboard is always OPEN

articleOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {               
                keyboardMode = 1;

                    Intent i = new Intent(NewOrderArticles.this, NewQuantityDialog.class);
                    i.putExtra("articleid", articleId);
                    startActivity(i);
            }
        }
    });

ويضمن أن لوحة المفاتيح مفتوحة مع نوع إدخال الهاتف. إذا قمت بنقر/قم بالتمرير عبر القائمة في متغير لوحة المفاتيح الرئيسية يصبح 2 (إخفاء دائمًا) - لذا فإن لوحة المفاتيح تختبئ (مع طريقة HideKeyboard تسمى List.Ontouch Beasher). إذا قمت بالنقر فوق بعض العناصر في القائمة ، فإنه يفتح DialogLikeActivity مع لوحة المفاتيح المفتوحة ونوع إدخال الهاتف. إذا قمت بالنقر فوق OK Onresume in Main Kicks in Enting Enting (انظر الكود Upthere).

كيف يبدو ذلك ، يرجى الاطلاع على الفيديو (زر موافق في الفيديو هو زر مقالوك) - فيديو (3،24 ميغابايت).

لذلك في الواقع - إذا قمت بالنقر فوق زر موافق (articleok) - يجب دائمًا عرض لوحة المفاتيح, ، إذا كنت ، ومع ذلك ، ابدأ في تمرير Thorugh القائمة أو انقر فوق بعض العناصر في القائمة - يجب إظهار لوحة المفاتيح فقط في نشاط الحوار, ، وإلا في الرئيسي ، يجب أن يبقى مخفيًا (Ofcourse إذا قمت بالنقر فوق حقل EditText في الأعلى يفتح مرة أخرى).

على الفيديو ، يمكنك مشاهدة HTC Desire وكل شيء يعمل بالطريقة التي أريدها ، ولكن - على Galaxy S دائما تظهر الجزء يعمل ، لكن إذا قمت بالنقر فوق/تمرير القائمة ، يفتح لوحة المفاتيح بنوع الرسالة (!) بدلاً من إخفاءه. أين المشكلة؟

لذلك ، زر موافق - عرض دائمًا لوحة المفاتيح (في النشاط الرئيسي والمربي). إذا انقر فوق/قم بتمرير قائمة المفاتيح القائمة فقط في DialoglikeActivity.

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

المحلول

لدي نفس المشكلة مع edittext التي تنبثق لوحة المفاتيح بأرقام. بعد النقر فوق "موافق" أو "إلغاء" ، لا تختبئ لوحة المفاتيح الظاهرية وتُظهر لوحة المفاتيح بنوع الرسالة ، على جهاز Samsung Galaxy. إنه يعمل بشكل جيد على المحاكيات 2.1 أو 2.2 وبطل HTC الخاص بي ، ولكن ليس على جهاز Samsung Galaxy S مع 2.2. لقد حاولت أيضًا: mgr.togglesoftinput (inputMethodManager.hide_implicit_only ، 0) ؛ لكن لا توجد فرصة

تحرير: حسنًا ، تم حل المشكلة مع هذا الخط فقط:

mgr.toggleSoftInput(0, 0);

وبدون هذين الخطين:

mgr.hideSoftInputFromWindow(view.getWindowToken(), 0);
articleNumber.setInputType(0);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top