কীভাবে দৃষ্টি নিবদ্ধ করা যায় তা কীভাবে আবিষ্কার করবেন?


89

কোনও ক্রিয়াকলাপের মধ্যে কোনও দৃষ্টি নিবদ্ধ করা হয়েছে এবং এটি কী দৃষ্টিভঙ্গি করেছে তা আমার খুঁজে বের করতে হবে। এই কিভাবে করবেন?

উত্তর:


117

getCurrentFocus()ক্রিয়াকলাপে কল করুন।


কিছু কারণে এটি "পরবর্তী" ক্রিয়া সহ সমস্ত শিশু দর্শন সাইক্লিংয়ের পরে বাতিল হয়ে যায় n
উইন্ডারাইডার

10
বিটিডাব্লু, গেটকন্টারফোকস () ক্রিয়াকলাপের একটি পদ্ধতি, দেখার মতো নয়।
টুলমেকারস্টেভ

4
... সুতরাং টুকরো টুকরোতে আমরা getActivity ()। getCurrentFocus () ব্যবহার করতে পারি। ক্লিয়ারফোকস () যেমন ..
মার্টিন

ভিউ এবং কল থেকে হোস্টিং ক্রিয়াকলাপ পাওয়া সম্ভব getCurrentFocus(), তবে এটি নির্ভরযোগ্য নয়।
oদো 95

কোটলিন: খণ্ডে -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;
    }

7

পরিবর্তে এটি চেষ্টা করুন, সমস্ত কিছু এ এর ​​ভিতরে রাখুন 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: \t" + idName + "\tClass: \t" + newView.getClass());
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();

কোটলিন

      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: \t" + idName + "\tClass: \t" + newView.javaClass)
                }
                try {
                    Thread.sleep(100)
                } catch (e: InterruptedException) {
                    e.printStackTrace()
                }
            }
        }).start()

সচেতন হন এই থ্রেডটি 100 মিমি চক্রের মধ্যে চলে তাই এটি অপ্রয়োজনীয় কাজের সাথে সিপিইউ উপচে না যায়।


আপনি এই কোডটি প্রসারিত করতে এবং একটি হাইলাইট যুক্ত করতে পারেন যাতে আপনি দেখতে পারেন কোন আইটেমটি নির্বাচিত is আইটেমটি পর্দার ভিতরে থাকা অবধি এটি কাজ করা উচিত। তবে এটি ব্যবহার logcatকরা অনেক বেশি সুরক্ষিত।
হারুন হাজেম

6

কোনও কারণে getCurrentFocus () পদ্ধতিটি আর উপলভ্য নয়; সম্ভবত এটি ইতিমধ্যে অবহিত হয়েছে, এখানে কাজের বিকল্প:

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

4
এটি দুটি পৃথক পদ্ধতি। গেটকন্টরফোকস () একটি ক্রিয়াকলাপ শ্রেণি পদ্ধতি এবং getFocusedChild () দেখুন শ্রেণীর অন্তর্গত
বিরক্ত হওয়া

4
@ বিরডটি: getFocusedChild()একটি পদ্ধতি চালু ViewGroup
gnuf


1

দৃষ্টিগোচর শিশুদের পুনরুদ্ধারের জন্য ভিউগ্রুপের বেশ সুবিধাজনক পদ্ধতি রয়েছে:

ViewGroup.getFocusedChild()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.