কম্পিউটার টিউটোরিয়াল

Android Visibility Listeners মাস্টার করুন: ভিউ দৃশ্যমানতা ট্র্যাক করার পদ্ধতি ও কারণ

Android UI ভিউগুলি থেকে তৈরি হয়, এবং একটি সাধারণ অ্যাপ্লিকেশনে সাধারণত এফের কিছু থাকে। ব্যবহারকারী বর্তমানে কোন ভিউ দেখছে তা জানতে আপনাকে Visibility Listeners ইনস্টল করতে হবে।

নিচে পড়ুন ভিউ-এর দৃশ্যমানতার অবস্থা চিহ্নিত করার জন্য আপনার কাছে থাকা বিভিন্ন বিকল্প সম্পর্কে জানতে।

কীভাবে দৃশ্যমান হতে হয়

আমাদের লিসেনাররা কাজ করার জন্য, প্রথমে নিশ্চিত করতে হবে যে আমাদের ভিউ লেআউট হায়ারার্কিতে পাওয়া যায়। এটি দুটি উপায়ে ঘটে:

  1. আপনার ভিউ ইতিমধ্যেই আপনার লেআউটের অংশ হিসেবে XML ফাইলে সংজ্ঞায়িত আছে
  2. আপনি একটি ভিউ ডাইনামিক্যালি তৈরি করেছেন, এবং এটি addView মেথড ব্যবহার করে যোগ করতে হবে
public void addView (View child, ViewGroup.LayoutParams params)
child হলো আপনি যে ভিউ যোগ করতে চান এবং LayoutParams হলো লেআউট প্যারামিটার (যেমন: প্রস্থ ও উচ্চতা)

একটি ভিউ-এর দৃশ্যমানতার অবস্থা Integer টাইপের এবং এর তিনটি সম্ভাব্য মান থাকে:

  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)

এই মেথডটি ট্রিগার হয় যখন আমাদের ভিউ-এর ধারক উইন্ডোর দৃশ্যমানতা পরিবর্তন হয়। এটি গ্যারান্টি দেয় না যে আপনার ভিউ যে উইন্ডোতে আছে তা ব্যবহারকারীর কাছে দৃশ্যমান, কারণ তা অন্য উইন্ডোর দ্বারা আচ্ছাদিত হতে পারে।

Visibility Listyers কার্যকর উদাহরণ

এই দুটি লিসেনারকে কাজে দেখতে, একটি সাধারণ প্রজেক্ট তৈরি করা যাক। আমাদের একটি LinearLayout থাকবে যার মধ্যে একটি TextView এবং একটি বাটন। বাটনের onClick অ্যাকশন আমাদের কাস্টম ভিউকে লেআউটে যোগ করবে।

Android Visibility Listeners মাস্টার করুন: ভিউ দৃশ্যমানতা ট্র্যাক করার পদ্ধতি ও কারণ

আমাদের কাস্টম ভিউ:

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 Listener সংযুক্ত করেছি

অ্যাপ্লিকেশন চালু করে বাটন চাপলে আমরা পাই:

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

স্যাম্পল প্রজেক্টটি এখান থেকে পেতে পারেন।

ViewTreeObserver

এটি একটি নেটিভ অবজেক্ট যার.various লিসেনার রয়েছে যা ভিউ ট্রির দৃশ্যমানতার পরিবর্তন সম্পর্কে জানায়। কিছু উল্লেখযোগ্য লিসেনার:

  • 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. Windows Sandbox: নিরাপদ সফ্টওয়্যার টেস্টিংয়ের জন্য সুরক্ষিত, তাত্ক্ষণিক আইসোলেশন

  2. অ্যান্ড্রয়েডে মাইক্রোসফ্ট এজ ইনস্টল ও দক্ষতার সাথে ব্যবহার করুন – দ্রুত গাইড

  3. Safari প্রাইভেট ব্রাউজিং মাস্টার করুন: কেন গুরুত্বপূর্ণ এবং কীভাবে ব্যবহার করবেন

  4. ব্যক্তিগত রিমাইন্ডার অ্যাপ কেন ও কিভাবে ব্যবহার করবেন: উৎপাদনশীলতা আনলক করুন