Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रणाली >> Android

Android विजिबिलिटी लिसनर्स में मास्टरी: व्यू विजिबिलिटी ट्रैक करने का तरीका और कारण

Android UI व्यूज़ से बना होता है, और एक सामान्य ऐप्लिकेशन में आमतौर पर कई व्यूज़ होते हैं। यह जानने के लिए कि यूज़र वर्तमान में किस व्यू को देख रहा है, आपको विजिबिलिटी लिसनर्स इंस्टॉल करने होंगे।

व्यू के विजिबिलिटी स्टेटस की पहचान करने के लिए आपके पास मौजूद विभिन्न विकल्पों के बारे में जानने के लिए आगे पढ़ें।

विजिबल कैसे बनें

हमारे लिसनर्स के काम करने के लिए, हमें पहले यह सुनिश्चित करना होगा कि हमारा व्यू लेआउट हायरार्की में मौजूद है। ऐसा दो तरीकों से होता है:

  1. आपका व्यू पहले से ही आपके लेआउट का हिस्सा है क्योंकि यह XML फ़ाइल में परिभाषित है
  2. आपने डायनामिकली एक व्यू बनाया है, और आपको इसे addView मेथड का उपयोग करके जोड़ना होगा
public void addView (View child, ViewGroup.LayoutParams params)
child वह व्यू है जिसे आप जोड़ना चाहते हैं और LayoutParams लेआउट पैरामीटर्स हैं (यानी चौड़ाई और ऊंचाई)

एक व्यू का विजिबिलिटी स्टेटस इंटीजर टाइप का होता है और इसके तीन विकल्प हो सकते हैं:

  1. VISIBLE (0) - व्यू यूज़र को दिखाई देता है
  2. INVISIBLE (4) - व्यू यूज़र के लिए अदृश्य है, लेकिन फिर भी लेआउट में जगह घेरता है
  3. GONE (8) - व्यू अदृश्य है, और यह लेआउट में कोई जगह नहीं घेरता

एक बार लेआउट हायरार्की में आने के बाद, हमारे व्यू की विजिबिलिटी कब बदलती है, यह जानने में मदद करने के लिए कुछ नेटिव विकल्प मौजूद हैं।

onVisibilityChanged

protected void onVisibilityChanged (View changedView, int visibility)

यह मेथड तब ट्रिगर होता है जब व्यू की विजिबिलिटी या उसके किसी पूर्वज (ancestor) की विजिबिलिटी बदलती है। विजिबिलिटी का स्टेटस visibility पैरामीटर में होता है।

onWindowVisibilityChanged

protected void onWindowVisibilityChanged (int visibility)

यह मेथड तब ट्रिगर होता है जब हमारे व्यू वाली विंडो की विजिबिलिटी बदलती है। इसका यह मतलब नहीं है कि आपका व्यू जिस विंडो में है वह यूज़र को दिखाई दे रहा है, क्योंकि वह किसी दूसरी विंडो से ढका हो सकता है।

विजिबिलिटी लिसनर्स एक्शन में

इन दो लिसनर्स को एक्शन में देखने के लिए, आइए एक सिंपल प्रोजेक्ट बनाते हैं। हमारे पास एक TextView और एक बटन के साथ एक LinearLayout होगा। हम बटन के ऑन-क्लिक एक्शन को अपने कस्टम व्यू को लेआउट में जोड़ने के लिए सेट करेंगे।

Android विजिबिलिटी लिसनर्स में मास्टरी: व्यू विजिबिलिटी ट्रैक करने का तरीका और कारण

हमारा कस्टम व्यू:

package com.tomerpacific.viewvisibility; import android.content.Context; import android.graphics.Color; import android.util.Log; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import static android.view.Gravity.CENTER; public class MyCustomView extends LinearLayout { private final String TAG = MyCustomView.class.getSimpleName(); public MyCustomView(Context context) { super(context); this.setBackgroundColor(Color.GREEN); this.setGravity(CENTER); TextView myTextView = new TextView(context); myTextView.setText("My Custom View"); addView(myTextView); } @Override public void onVisibilityChanged(View changedView, int visibility) { super.onVisibilityChanged(changedView, visibility); Log.d(TAG, "View " + changedView + " changed visibility to " + visibility); } @Override public void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); Log.d(TAG, "Window visibility changed to " + visibility); } }

और अंत में, हमारे MainActivity का कोड:

package com.tomerpacific.viewvisibility; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { private Button addCustomViewBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); addCustomViewBtn = (Button) findViewById(R.id.addCustomViewBtn); addCustomViewBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { LinearLayout mainLayout = (LinearLayout) findViewById(R.id.mainLayout); MyCustomView myCustomView = new MyCustomView(getApplicationContext()); myCustomView.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); mainLayout.addView(myCustomView); } }); } }
हम बटन पर एक OnClick लिसनर अटैच करते हैं

जब हम ऐप्लिकेशन चलाते हैं और बटन दबाते हैं तो हमें मिलता है:

https://giphy.com/gifs/8JZA6Djt7DmYpEXj2h/html5

आप सैंपल प्रोजेक्ट यहाँ से प्राप्त कर सकते हैं।

ViewTreeObserver

यह एक नेटिव ऑब्जेक्ट है जिसमें कई तरह के लिसनर्स होते हैं जो व्यू ट्री में होने वाले विभिन्न विजिबिलिटी परिवर्तनों के बारे में सूचित करते हैं। कुछ प्रमुख जिन पर ध्यान देना चाहिए:

  • OnGlobalLayoutListener
  • OnWindowAttachListener
  • OnWindowFocusChangeListener

ViewTreeObserver अटैच करने के लिए, आपको निम्न कार्य करने होंगे:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.YOUR_VIEW_ID); ViewTreeObserver viewTreeObserver = linearLayout.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener (new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); //TODO लॉजिक जोड़ें } });
removeOnGlobalLayoutListener के लिए API > 15 आवश्यक है

linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) लाइन यह सुनिश्चित करती है कि लिसनर केवल एक बार कॉल होगा। यदि आप परिवर्तनों को सुनना जारी रखना चाहते हैं, तो इसे न हटाएं।

यदि आपके कोई कमेंट्स या सुझाव हैं, तो बेझिझक मुझे बताएं।

  1. Android पर Microsoft Edge इंस्टॉल और मास्टर करें - त्वरित गाइड Android पर Microsoft Edge इंस्टॉल और मास्टर करें - त्वरित गाइड

    Microsoft का Edge उन विशेषताओं से भरा हुआ है जो डिफ़ॉल्ट ब्राउज़र को उपयोग करने में आनंददायक बनाते हैं - यह किसी भी दिन अब-निष्क्रिय Internet Explorer को मात देता है। और, यदि आप एक प्रशंसक हैं, तो Edge अनुभव को अपने स्मार्टफोन पर लाना एक अच्छा विचार हो सकता है। इस लेख में, हम ठीक उसी को देखेंगे। पहल

  1. Safari के निजी ब्राउज़िंग में महारत: यह क्यों मायने रखता है और इसका उपयोग कैसे करें Safari के निजी ब्राउज़िंग में महारत: यह क्यों मायने रखता है और इसका उपयोग कैसे करें

    इन दिनों हर वेब ब्राउज़र की तरह, macOS X के लिए डिफ़ॉल्ट वेब ब्राउज़र Safari भी उन्नत हो गया है। यह सुरक्षित है और एक ही समय में कई टैब संभालने के लिए तैयार है। लेकिन अगर हम निजी ब्राउज़िंग की बात करें, तो यह निजी ब्राउज़िंग मोड से भी लैस है जो आपको गुप्त रूप से ब्राउज़ करने में मदद करता है। Mac पर

  1. उत्पादकता अनलॉक करें: पर्सनल रिमाइंडर ऐप का उपयोग क्यों और कैसे करें उत्पादकता अनलॉक करें: पर्सनल रिमाइंडर ऐप का उपयोग क्यों और कैसे करें

    हे भगवान! मैं पूरी तरह भूल गया। मैं दिन में कम से कम एक-दो बार उपरोक्त कथन का उपयोग करता हूं क्योंकि मैं चीजें भूलता रहता हूं। अब मुझे पता है कि मेरे मस्तिष्क या स्वास्थ्य में कुछ भी गलत नहीं है और यह भूलने की बीमारी आज दुनिया के तेज गति से चलने के कारण है। करने के लिए बहुत कुछ है, मिलने के लिए बहुत