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

অ্যান্ড্রয়েডে ভার্চুয়াল কীবোর্ডের ভিজিবিলিটি চেক করা


ViewTreeObserver.OnGlobalLayoutListener দিয়ে কীবোর্ড স্টেট ডিটেক্ট

অ্যান্ড্রয়েডে কীবোর্ড ভিজিবল কিনা চেক করার কোনো ডাইরেক্ট API নেই। সাধারণ পদ্ধতি: রুট ভিউর হাইট পরিবর্তন পর্যবেক্ষণ করা।

বাস্তবায়ন

public class MainActivity extends AppCompatActivity {
    private ConstraintLayout rootView;
    private EditText etInput;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        rootView = findViewById(R.id.rootview);
        etInput = findViewById(R.id.etInput);
        Button btn = findViewById(R.id.btnHideKeyboard);
        
        etInput.requestFocus();
        showKeyboard(etInput);
        
        // গ্লোবাল লেআউট লিসেনার
        rootView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
            Rect r = new Rect();
            rootView.getWindowVisibleDisplayFrame(r);
            
            int screenHeight = rootView.getRootView().getHeight();
            int keypadHeight = screenHeight - r.bottom;
            
            // 15% এর বেশি হাইট থাকলে কীবোর্ড ওপেন মনে করা হয়
            boolean isKeyboardVisible = keypadHeight > screenHeight * 0.15;
            
            runOnUiThread(() -> {
                if (isKeyboardVisible) {
                    Log.d("Keyboard", "Keyboard is SHOWING");
                } else {
                    Log.d("Keyboard", "Keyboard is HIDDEN");
                }
            });
        });
        
        btn.setOnClickListener(v -> hideKeyboard(v));
    }
    
    private void hideKeyboard(View v) {
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        if (imm != null) imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
    }
    
    private void showKeyboard(View v) {
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        if (imm != null) imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // লিসেনার রিমুভ করুন (ল্যাম্বডায় রিমুভ করা কঠিন, নামড ক্লাস ব্যবহার করুন)
    }
}

কিভাবে কাজ করে

  1. getWindowVisibleDisplayFrame(r) — স্ক্রিনের ভিজিবল এরিয়ার (কীবোর্ড বাদে) রিক্টে ফেলে।
  2. screenHeight - r.bottom — কীবোর্ডের ước অনুমানিক হাইট।
  3. যদি হাইট স্ক্রিন হাইটের ১৫%+ হয়, ধরে নেওয়া হয় কীবোর্ড ওপেন।

সতর্কতা

  • ন্যাভিগেশন বার, স্ট্যাটাস бар, জেস্ট ন্যাভিগেশন হ্যান্ডেলিং এফেক্ট করতে পারে।
  • লিসেনার onDestroy-এ রিমুভ করুন (লিক এড়াতে)।
  • এমুলেটরে আচরণ রিয়েল ডিভাইস থেকে ভিন্ন হতে পারে।

আধুনিক বিকল্প: WindowInsetsCompat / WindowInsetsAnimationCompat (API 30+) ব্যবহার করুন আরও নির্ভরযোগ্য ফলাফলের জন্য।


  1. Android-এ কীবোর্ড কীভাবে পরিবর্তন করবেন?

  2. অ্যান্ড্রয়েড কীবোর্ড ইতিহাস মুছে ফেলুন: ধাপে ধাপে গাইড

  3. আপনার অ্যান্ড্রয়েড কীবোর্ড রিসাইজ করুন: ভালো দৃশ্যমানতার জন্য সহজ টিপস

  4. আপনার অ্যান্ড্রয়েড ব্যাটারি স্বাস্থ্য যাচাই করুন: ধাপে ধাপ গাইড