android - कस्टम संपादन टेक्स्ट फ़ोकस पर कीबोर्ड नहीं दिखा रहा है




android-edittext android-custom-view (4)

मैं एक कस्टम संपादन टेस्ट वर्ग बना रहा हूं क्योंकि मुझे कुछ कस्टम फ़ॉन्ट सेट करने की आवश्यकता है; हालांकि अब जब मैं editText पर क्लिक करता हूं तो एंड्रॉइड कीबोर्ड पॉप अप नहीं करता है ...

यहां मेरा वर्ग है:

    package ro.gebs.captoom.utils.fonts;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

import ro.gebs.captoom.R;

public class CustomFontEditText extends EditText {

    private Context context;

    public CustomFontEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        if (!isInEditMode()) {
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFontEditText,
                    defStyle, 0);

            assert a != null;
            int fontId = a.getInteger(R.styleable.CustomFontEditText_fontNameEdit, -1);
            if (fontId == -1) {
                throw new IllegalArgumentException("The font_name attribute is required and must refer "
                        + "to a valid child.");
            }
            a.recycle();
            initialize(fontId);
        }
        this.context = context;
    }

    public CustomFontEditText(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
        this.context = context;
    }

    public CustomFontEditText(Context context) {
        super(context);
        this.context = context;
    }

    @SuppressWarnings("ConstantConditions")
    public void initialize(int fontId) {

        Typeface tf = null;
        switch (fontId) {
            case 0:
                tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/OpenSans-Regular.ttf");
                break;
            case 1:
                tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/OpenSans-Bold.ttf");
                break;
            case 2:
                tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/OpenSans-Semibold.ttf");
                break;
            case 3:
                tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/OpenSans-ExtraBold.ttf");
                break;
        }

        setTypeface(tf);
    }
}

और मैं इसे एक्सएमएल में कैसे उपयोग करता हूं:

<ro.gebs.captoom.utils.fonts.CustomFontEditText
                        android:id="@+id/add_details_txt_edit"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="10dip"
                        android:hint="@string/type_here"
                        android:inputType="textPersonName"
                        custom:fontNameEdit="Regular" />

मैंने सोचा कि फ़ोकसिंग इवेंट को इस तथ्य से संभाला गया था कि मैं संपादन टेक्स्ट क्लास का विस्तार करता हूं ...

कोई संकेत?


इसे जोड़ो

 android:focusable="true"

रनटाइम और कॉल अनुरोध फोकस पर संपादन टेक्स्ट के लिए संदर्भ बनाने का प्रयास करें ()

    et.requestFocus()

और कोशिश

   android:focusable="true"

 editText.setOnTouchListener(new OnTouchListener() 
  {
    @Override
    public boolean onTouch(View v, MotionEvent event) 
     {
         editText.setFocusableInTouchMode(true);
         return false;
     }
  });

यह एक पुराना सवाल है लेकिन अगर कोई परवाह करता है, तो समस्या निर्माता के कार्यान्वयन पर है:

public CustomFontEditText(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
    this.context = context;
}

अंतिम तर्क ("defStyle") जिसे आप 0 के रूप में सेट करते हैं, एक EditText के लिए डिफ़ॉल्ट शैली होनी चाहिए। यदि आप संपादन टेक्स्ट क्लास पर एक ही कन्स्ट्रक्टर पर एक नज़र डालते हैं:

public EditText(Context context, AttributeSet attrs) {
    this(context, attrs, com.android.internal.R.attr.editTextStyle);
}

जैसा कि आप देख सकते हैं, एक EditText के लिए डिफ़ॉल्ट शैली का उपयोग किया जाना चाहिए, इसलिए आपका कन्स्ट्रक्टर इस तरह दिखना चाहिए:

public CustomFontEditText(Context context, AttributeSet attrs) {
    this(context, attrs, android.R.attr.editTextStyle);
    this.context = context;
}




android-input-method