Android UI ভিউগুলি থেকে তৈরি হয়, এবং একটি সাধারণ অ্যাপ্লিকেশনে সাধারণত এফের কিছু থাকে। ব্যবহারকারী বর্তমানে কোন ভিউ দেখছে তা জানতে আপনাকে Visibility Listeners ইনস্টল করতে হবে।
নিচে পড়ুন ভিউ-এর দৃশ্যমানতার অবস্থা চিহ্নিত করার জন্য আপনার কাছে থাকা বিভিন্ন বিকল্প সম্পর্কে জানতে।
কীভাবে দৃশ্যমান হতে হয়
আমাদের লিসেনাররা কাজ করার জন্য, প্রথমে নিশ্চিত করতে হবে যে আমাদের ভিউ লেআউট হায়ারার্কিতে পাওয়া যায়। এটি দুটি উপায়ে ঘটে:
- আপনার ভিউ ইতিমধ্যেই আপনার লেআউটের অংশ হিসেবে XML ফাইলে সংজ্ঞায়িত আছে
- আপনি একটি ভিউ ডাইনামিক্যালি তৈরি করেছেন, এবং এটি addView মেথড ব্যবহার করে যোগ করতে হবে
public void addView (View child, ViewGroup.LayoutParams params)
একটি ভিউ-এর দৃশ্যমানতার অবস্থা Integer টাইপের এবং এর তিনটি সম্ভাব্য মান থাকে:
- VISIBLE (0) - ভিউ ব্যবহারকারীর কাছে দৃশ্যমান
- INVISIBLE (4) - ভিউ ব্যবহারকারীর কাছে অদৃশ্য, কিন্তু লেআউটে স্পেস নেয়
- GONE (8) - ভিউ অদৃশ্য, এবং লেআউটে কোনো স্পেস না নেয়
লেআউট হায়ারার্কির ভিতর আসার পর, আমাদের ভিউ-এর দৃশ্যমানতা পরিবর্তন হলে জানার জন্য কিছু নেটিভ অপশন রয়েছে।
onVisibilityChanged
protected void onVisibilityChanged (View changedView, int visibility)
এই মেথডটি ট্রিগার হয় যখন ভিউ বা এর أي ancestor-এর দৃশ্যমানতা পরিবর্তন হয়। দৃশ্যমানতার অবস্থা visibility প্যারামিটারের ভিতরে পাওয়া যায়।
onWindowVisibilityChanged
protected void onWindowVisibilityChanged (int visibility)
এই মেথডটি ট্রিগার হয় যখন আমাদের ভিউ-এর ধারক উইন্ডোর দৃশ্যমানতা পরিবর্তন হয়। এটি গ্যারান্টি দেয় না যে আপনার ভিউ যে উইন্ডোতে আছে তা ব্যবহারকারীর কাছে দৃশ্যমান, কারণ তা অন্য উইন্ডোর দ্বারা আচ্ছাদিত হতে পারে।
Visibility Listyers কার্যকর উদাহরণ
এই দুটি লিসেনারকে কাজে দেখতে, একটি সাধারণ প্রজেক্ট তৈরি করা যাক। আমাদের একটি LinearLayout থাকবে যার মধ্যে একটি TextView এবং একটি বাটন। বাটনের onClick অ্যাকশন আমাদের কাস্টম ভিউকে লেআউটে যোগ করবে।
আমাদের কাস্টম ভিউ:
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
এটি একটি নেটিভ অবজেক্ট যার.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 লজিক যোগ করুন } });
linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this) লাইনটি নিশ্চিত করে যে লিসেনারটি শুধু একবার কল হবে। আপনি যদি পরিবর্তনগুলো শুনতে চান, তবে এটি সরিয়ে দিন।
আপনার যেকোনো মন্তব্য বা পরামর্শ থাকলে জানাতে পারেন।