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

Android दृश्यता श्रोताओं का उपयोग कैसे और क्यों करें

एंड्रॉइड यूआई दृश्यों से बनाया गया है, और एक नियमित एप्लिकेशन में, आमतौर पर उनमें से कई होते हैं। यह पता लगाने के लिए कि उपयोगकर्ता वर्तमान में किस दृश्य को देख रहा है, आपको दृश्यता श्रोता . स्थापित करने की आवश्यकता है ।

किसी दृश्य की दृश्यता स्थिति की पहचान करने के लिए आपके पास विभिन्न विकल्पों के बारे में जानने के लिए नीचे पढ़ें।

दृश्यमान कैसे बनें

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

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

एक दृश्य की दृश्यता स्थिति पूर्णांक प्रकार की होती है और इसमें तीन विकल्पों में से एक हो सकता है:

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

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

onVisibilityChanged

protected void onVisibilityChanged (View changedView, int visibility)

यह विधि तब शुरू होती है जब दृश्य की दृश्यता या दृश्य के पूर्वज की दृश्यता बदल जाती है। दृश्यता की स्थिति दृश्यता पैरामीटर के अंदर पाई जाती है।

onWindowVisibilityChanged

protected void onWindowVisibilityChanged (int visibility)

यह विधि तब शुरू होती है जब हमारे व्यू की युक्त विंडो ने अपनी दृश्यता बदल दी है। यह इस बात की गारंटी नहीं देता है कि आपका दृश्य जिस विंडो में है वह उपयोगकर्ता के लिए दृश्यमान है, क्योंकि यह किसी अन्य विंडो द्वारा अस्पष्ट हो सकती है।

दृश्यता श्रोता कार्रवाई में हैं

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

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);
            }
        });
    }
}
हम बटन पर एक ऑनक्लिक श्रोता संलग्न करते हैं

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

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

आप नमूना परियोजना यहाँ प्राप्त कर सकते हैं।

ViewTreeObserver

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

  • OnGlobalLayoutListener
  • ऑनविंडोअटैच लिस्टनर
  • 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 Add Logic
    } 
});
removeOnGlobalLayoutListener को API की आवश्यकता है> 15

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

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


  1. Android पर Edge कैसे इंस्टॉल करें और उसका उपयोग कैसे करें

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

  1. Safari पर निजी ब्राउज़िंग का उपयोग क्यों और कैसे करें

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