कैसे पता करें कि कौन सा दृश्य केंद्रित है?


87

मुझे यह पता लगाने की आवश्यकता है कि क्या किसी गतिविधि के अंदर कोई दृश्य केंद्रित है और वह क्या दृश्य है। यह कैसे करना है?

जवाबों:


114

getCurrentFocus()गतिविधि पर कॉल करें ।


किसी कारण से यह "अगली" कार्रवाई के साथ सभी बच्चे के विचारों को साइकिल चलाने के बाद शून्य हो जाता है।
— विंडराइडर

10
BTW, getCurrentFocus () गतिविधि का एक तरीका है, देखने का नहीं।
— टूलमेकरसेव

3
... तो टुकड़ों में हम getActivity () का उपयोग कर सकते हैं। getCurrentFocus ()। ClearFocus () उदा ..
— मार्टिन

एक दृश्य और कॉल से होस्टिंग गतिविधि प्राप्त करना संभव है getCurrentFocus(), लेकिन यह विश्वसनीय नहीं है।
— Eido95

kotlin: टुकड़े में -activity?.currentFocus
— मोहम्मद रज़ा ख़ानी

12

गतिविधि के स्रोत से:

   /**
     * Calls {@link android.view.Window#getCurrentFocus} on the
     * Window of this Activity to return the currently focused view.
     * 
     * @return View The current View with focus or null.
     * 
     * @see #getWindow
     * @see android.view.Window#getCurrentFocus
     */
    public View getCurrentFocus() {
        return mWindow != null ? mWindow.getCurrentFocus() : null;
    }

6

किसी कारण के लिए getCurrentFocus () विधि अब उपलब्ध नहीं है; शायद यह पहले से ही पदावनत है, यहाँ काम करने का विकल्प:

View focusedView = (View) yourParentView.getFocusedChild();

1
यह दो अलग-अलग विधियाँ हैं। getCurrentFocus () एक एक्टिविटी क्लास मेथड है और getFocusedChild () व्यू क्लास से संबंधित है
— BoredT

2
@ बोरेड: getFocusedChild()एक विधि है ViewGroup।
— gnuf

5

इसके बजाय यह प्रयास करें, सब कुछ अंदर रखें threadऔर आईडी और क्लासनाम लाइव को प्रिंट करें logcat। इस कोड को अपने अंदर रखें Activity, इस onCreateविधि में फिर अपने logcatध्यान से देखें कि वर्तमान में क्या केंद्रित है।

जावा

  new Thread(() -> {
        int oldId = -1;
        while (true) {
            View newView= this.getCurrentFocus();
            if (newView!= null && newView.getId() != oldId) {
                oldId = view.getId();
                String idName = "";
                try {
                   idName = getResources().getResourceEntryName(newView.getId());
                 } catch (Resources.NotFoundException e) {
                   idName = String.valueOf(newView.getId());
                 }
                Log.i(TAG, "Focused Id: " + idName + " Class: " + newView.getClass());
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();

KOTLIN

      Thread(Runnable {
            var oldId = -1
            while (true) {
                val newView: View? = this.currentFocus
                if (newView != null && newView.id != oldId) {
                    oldId = newView.id
                    var idName: String = try {
                        resources.getResourceEntryName(newView.id)
                    } catch (e: Resources.NotFoundException) {
                        newView.id.toString()
                    }
                    Log.i(TAG, "Focused Id: " + idName + " Class: " + newView.javaClass)
                }
                try {
                    Thread.sleep(100)
                } catch (e: InterruptedException) {
                    e.printStackTrace()
                }
            }
        }).start()

ध्यान रखें कि यह धागा 100ms के चक्र में चलता है इसलिए यह अनावश्यक काम के साथ सीपीयू को ओवरफ्लो नहीं करता है।



1

ViewGroup केंद्रित बच्चे को प्राप्त करने के लिए काफी सुविधाजनक तरीका है:

ViewGroup.getFocusedChild()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.