অ্যান্ড্রয়েড UI ভিউ থেকে তৈরি করা হয় এবং একটি নিয়মিত অ্যাপ্লিকেশানে সাধারণত বেশ কয়েকটি থাকে৷ ব্যবহারকারী বর্তমানে কোন ভিউ দেখছেন তা খুঁজে বের করতে, আপনাকে দৃশ্যমান শ্রোতা ইনস্টল করতে হবে .
একটি ভিউয়ের দৃশ্যমানতার স্থিতি শনাক্ত করার জন্য আপনার কাছে থাকা বিভিন্ন বিকল্পগুলি সম্পর্কে জানতে নীচে পড়ুন৷
৷কিভাবে দৃশ্যমান হবে
আমাদের শ্রোতাদের কাজ করার জন্য, আমাদের প্রথমে নিশ্চিত করতে হবে যে লেআউট শ্রেণিবিন্যাসে আমাদের ভিউ পাওয়া যায়। এটি দুটি উপায়ে ঘটে:
- আপনার ভিউ ইতিমধ্যেই আপনার লেআউটের অংশ কারণ এটি একটি XML ফাইলে সংজ্ঞায়িত করা হয়েছে
- আপনি গতিশীলভাবে একটি ভিউ তৈরি করেছেন, এবং আপনাকে অ্যাডভিউ পদ্ধতি ব্যবহার করে এটি যোগ করতে হবে
public void addView (View child, ViewGroup.LayoutParams params)
একটি ভিউয়ের দৃশ্যমানতার স্থিতি পূর্ণসংখ্যার প্রকারের এবং তিনটি বিকল্পের একটি থাকতে পারে:
- দৃশ্যমান (0)৷ - ভিউটি ব্যবহারকারীর কাছে দৃশ্যমান হয়
- অদৃশ্য (4)৷ - ভিউটি ব্যবহারকারীর কাছে অদৃশ্য, কিন্তু তারপরও লেআউটে স্থান নেয়
- গেল (৮) - দৃশ্যটি অদৃশ্য, এবং এটি লেআউটে স্থান নেয় না
আমাদের লেআউট অনুক্রমের ভিতরে একবার, আমাদের ভিউ এর দৃশ্যমানতা কখন পরিবর্তিত হয়েছে তা জানতে সাহায্য করার জন্য কয়েকটি নেটিভ বিকল্প রয়েছে৷
অনভিজিবিলিটি চেঞ্জড
protected void onVisibilityChanged (View changedView, int visibility)
এই পদ্ধতিটি ট্রিগার করা হয় যখন দৃশ্যের দৃশ্যমানতা বা দৃশ্যের পূর্বপুরুষের পরিবর্তন হয়। দৃশ্যমানতার অবস্থা দৃশ্যমানতা প্যারামিটারের ভিতরে পাওয়া যায়।
উইন্ডোভিজিবিলিটি চেঞ্জ করা হয়েছে
protected void onWindowVisibilityChanged (int visibility)
এই পদ্ধতিটি ট্রিগার করা হয় যখন আমাদের ভিউ এর ধারণকৃত উইন্ডোটি তার দৃশ্যমানতা পরিবর্তন করে। এটি গ্যারান্টি দেয় না যে আপনার ভিউ যে উইন্ডোটিতে রয়েছে সেটি ব্যবহারকারীর কাছে দৃশ্যমান, কারণ এটি অন্য একটি উইন্ডো দ্বারা অস্পষ্ট হতে পারে৷
ভিজিবিলিটি লিসেনার ইন অ্যাকশন
এই দুই শ্রোতাকে কর্মে দেখতে, আসুন একটি সাধারণ প্রকল্প তৈরি করি। আমাদের একটি টেক্সটভিউ এবং একটি বোতাম সহ একটি লিনিয়ার লেআউট থাকবে। আমরা লেআউটে আমাদের কাস্টম ভিউ যোগ করার জন্য ক্লিক অ্যাকশনে বোতাম তৈরি করব।
আমাদের কাস্টম ভিউ:
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);
}
}
এবং পরিশেষে, আমাদের প্রধান কার্যকলাপের কোড:
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
- 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 Add Logic
}
});
লাইন linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this)
নিশ্চিত করে যে শ্রোতা শুধুমাত্র একবার কল করা হবে। আপনি যদি পরিবর্তনগুলি শোনা চালিয়ে যেতে চান তবে এটি সরিয়ে দিন৷
আপনার কোন মন্তব্য বা পরামর্শ থাকলে, নির্দ্বিধায় আমাকে জানাতে পারেন।