সফ্ট কীবোর্ড প্রদর্শিত হলে লেআউটগুলি সরানো হবে?


139

সরল নীচের বৈশিষ্ট্য সেট সহ আমার একটি সম্পর্কিত কিছুতে কিছু উপাদান রয়েছে, যখন সফ্ট কীবোর্ড আসে তখন উপাদানগুলি নরম কীবোর্ড দ্বারা লুকানো থাকে।

আমি তাদের উপরে সরাতে চাই যাতে পর্যাপ্ত পর্দার জায়গা যদি সেগুলি কীবোর্ডের উপরে প্রদর্শিত হয় বা কীবোর্ডের উপরে বিভাগটি স্ক্রোলযোগ্য করে তোলে যাতে ব্যবহারকারী এখনও উপাদানগুলি দেখতে পারে।

কিভাবে এই সম্পর্কে যোগাযোগ করতে কোন ধারণা?



@ ডিনালাল আপনার আপেক্ষিক ভিউতে আপনি নীচের বৈশিষ্ট্যটিকে কীভাবে সামঞ্জস্য করবেন?
কেজেএজভা 48

উত্তর:


107

হ্যাঁ, অ্যান্ড্রয়েড বিকাশকারীদের সাইটে এই নিবন্ধটি পরীক্ষা করে দেখুন যা ফ্রেমওয়ার্কটি কীভাবে প্রদর্শিত সফ্ট কীবোর্ডকে পরিচালনা করে তা বর্ণনা করে।

android:windowSoftInputModeঅথবা লেআউট মাপ পরিবর্তন হয় কিনা তা ইত্যাদি স্ক্রোল করে: অ্যাট্রিবিউট প্রতি কার্যকলাপ ভিত্তিতে সেখানে কি ঘটছে নির্দিষ্ট করতে ব্যবহার করা যেতে পারে


95

আপনি এই কোডটি onCreate()পদ্ধতিতেও ব্যবহার করতে পারেন :

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

11
আমার জন্য এমনকি যদি আমি সামঞ্জস্য করি প্যান স্ক্রেন কেবল ক্লিক করে সম্পাদিত পাঠ্যের উপরে চলে যায় তবে পুরো লেআউটটি না
59-

33

আপনার ক্রিয়াকলাপের জন্য AndroidManLive.xML এ যুক্ত করুন:

android:windowSoftInputMode="adjustPan|adjustResize"

22
ডক্স অনুসারে আপনি যদি এখানে দুটি "অ্যাডজাস্ট ..." পতাকা ব্যবহার করেন তবে আচরণটি অনির্ধারিত। দেখুন developer.android.com/guide/topics/manifest/...
user1806772

22

আপনার ম্যানিফেস্ট ফাইলটির ক্রিয়াকলাপে পরিবর্তন করুন

windowSoftInputMode="adjustResize"

অথবা

আপনার onCreate()পদ্ধতিতে ক্রিয়াকলাপ শ্রেণিতে পরিবর্তন আনুন

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

11
কেন আপনি বিভিন্ন পতাকা ব্যবহার করেন?
কুলমাইন্ড

বর্তমান সংস্করণটির জন্য অ্যান্ড্রয়েড উপসর্গ প্রয়োজন: অ্যান্ড্রয়েড: উইন্ডোসফট ইনপুটমোড = "অ্যাডজাস্টারাইজ করুন"
আন্দ্রে

21

অনুরূপ ইস্যুতে আমি আমার লেআউটটির মুখোমুখি হলাম যা ভিতরে স্ক্রোল ভিউ ধারণ করে। আমি যখনই সম্পাদনা পাঠ্য পাঠ্যটি নির্বাচন করার চেষ্টা করি তখন কপিরাইট / কাট / পেস্ট অ্যাকশন বারটি নীচের কোডের সাথে সজ্জিত হয়ে যায় কারণ এর লেআউটটিকে পুনরায় আকার দেয় না

android:windowSoftInputMode="adjustPan"

এটি নীচের হিসাবে পরিবর্তন করে

1) অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল

android:windowSoftInputMode="stateVisible|adjustResize"

2) স্টাইল.এক্সএমএল ফাইল, ক্রিয়াকলাপের স্টাইলে

<item name="android:windowActionBarOverlay">true</item>

এটা কাজ করেছে.!!!!!!!!!!!!


18

অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল এ সেট করতে ভুলবেন না:

 android:windowSoftInputMode="adjustResize"

এবং স্ক্রোলভিউয়ের মধ্যে রিলেটিভলআউটের জন্য সেট করুন:

 android:layout_gravity="center" or android:layout_gravity="bottom" 

এটা ঠিক আছে হবে


অ্যান্ড্রয়েড: লেআউট_গ্রাভিটি = "কেন্দ্র" কাজ করেছে, ধন্যবাদ! :) এখন এডিট টেক্সট কীবোর্ডের উপর দিয়ে যাচ্ছিল আমি যেমন চাইছিলাম
পাভেল বিরিয়ুকভ

11

ক্রিয়াকলাপের জন্য লাইনের নীচে এটির oncreate methode sertোকান

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

এবং এটির অনক্রিট পদ্ধতিতে খণ্ডগুলির জন্য

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

10

স্ক্রোল আপ করতে অনুসরণ করতে 3 টি পদক্ষেপ রয়েছে।

  1. আপনার ক্রিয়াকলাপের জন্য ম্যানিফেস্ট ফাইলটিতে লিখুন:

অ্যান্ড্রয়েড windowSoftInputMode = "adjustResize"

  1. আপনার ক্রিয়াকলাপের oncreate () পদ্ধতিতে নিম্নলিখিত লাইন যুক্ত করুন

। GetWindow () setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

  1. তারপরে আপনার সম্পূর্ণ দৃশ্যটি এক্সএমএল ফাইলে "স্ক্রোলভিউ" তে রাখুন:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:background="@drawable/bg"
    android:layout_height="match_parent" 
    > 
    <RelativeLayout
         android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" >
        <TextView />
         .........
        <TextView />
        <EditText >
            <requestFocus />
        </EditText>
        <Button />
    </RelativeLayout>
 </ScrollView>

পিএস অ্যান্ড্রয়েড যুক্ত করতে ভুলবেন না: পিতামহুল আপেক্ষিক লেআউটে লেআউট_গ্রাভিটি = "কেন্দ্র"।


6

আমি দিয়েগো রামেরেজের একটি পদ্ধতি চেষ্টা করেছি, এটি কাজ করে। অ্যান্ড্রয়েড ম্যানিফেস্টে:

    <activity
        android:name=".MainActivity"
        android:windowSoftInputMode="stateHidden|adjustResize">
        ...
    </activity>

ক্রিয়াকলাপ_মন.এক্সএমএল:

<LinearLayout ...
    android:orientation="vertical">

<Space
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="1" />

<EditText
    android:id="@+id/edName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/first_name"
    android:inputType="textPersonName" />

<EditText ...>
...
</LinearLayout>

6
<activity name="ActivityName"
    android:windowSoftInputMode="adjustResize">
    ...
</activity>

আপনি যে লেআউটটি স্ক্রোল করতে চান তার চারদিকে নেস্টডস্ক্রোলভিউ যুক্ত করুন, এটি পুরোপুরি কার্যকর হবে


3

আমি আমার সমস্যার সমাধান পেয়েছি যা এটি আপনার মতোই সমান।

প্রথমত, আমার কাছে কেবলমাত্র দুটি উপাদান সহ একটি লিনিয়ারলআউট আছে, একটি চিত্র ভিউ এবং একটি লিনিয়ারলআউটে যা 2 এডিটটেক্সট এবং একটি বোতাম রয়েছে তাই আমার কীবোর্ড ছাড়াই তাদের পুরো স্ক্রিনে আলাদা রাখতে হবে এবং যখন কীবোর্ড প্রদর্শিত হবে তখন তাদের আরও কাছাকাছি হওয়া উচিত।

সুতরাং আমি তাদের মধ্যে 0 ডিপি এবং ওজন 1 এর উচ্চতা বৈশিষ্ট্যের সাথে দৃষ্টিভঙ্গিটি যুক্ত করেছি, যা আমাকে আমার মতামতকে একে অপরের থেকে আলাদা করে রাখতে দেয়। এবং কীবোর্ড অ্যাপ্লিকেশনগুলির যখন কোনও স্থির উচ্চতা না থাকে, তারা কেবল আকার পরিবর্তন করে দিকটি রাখে।

ভাল খবর! কীবোর্ডটি উপস্থিত না থাকায় লেআউটের আকার পরিবর্তন এবং আমার দর্শনগুলির মধ্যে দূরত্ব একই is


6
আপনি আরও ভাল বোঝার জন্য কেন কোড পোস্ট করেন না?
জনকরকা

আমি উপরে একটি নমুনা কোড পোস্ট করেছি: stackoverflow.com/a/31994697/2914140
কুলমাইন্ড

আপনি ConstraintLayoutউপরের অংশে শীর্ষ বিভাগ এবং নীচে নীচের অংশে পিনিং ব্যবহার করে কম হ্যাকি উপায়ে এটি অর্জন করতে পারেন । কীবোর্ডটি খুললে এটি মাঝখানে স্থানটি (যদি আপনি ব্যবহার করেন তবে adjustResize) প্রাকৃতিকভাবে আকার পরিবর্তন করবে
hmac

2
If user want this task using manifest then add this line in manifest
In manifest add this line: - android:windowSoftInputMode="adjustPan"
    e.g.
     <activity
           android:name=".ui.home.HomeActivity"
           android:screenOrientation="portrait"
           android:windowSoftInputMode="adjustPan">
     </activity>


    In Java File or Kotlin File(Programically) : - If user want this using Activity then add below line in onCreate Method

    activity!!.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

হাই এবং স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম, এবং আপনার উত্তরের জন্য আপনাকে ধন্যবাদ। কোডের একটি ব্লক পোস্ট করার পরিবর্তে, আপনি কী সমস্যার সমাধান করেছেন এবং কীভাবে আপনি এটি সমাধান করেছেন সে সম্পর্কে একটি সংক্ষিপ্ত ব্যাখ্যা দিতে পারেন? ভবিষ্যতে এই প্রশ্নটি খুঁজে পাওয়া লোকেরা এই সমস্যাটি আরও ভালভাবে বুঝতে এবং এটি কীভাবে মোকাবেলা করতে সহায়তা করবে।
প্লুটিয়ান

1

এখানে পূর্ণ প্রকাশ কোড

<activity
        android:name=".activities.MainActivity"
        android:windowSoftInputMode="adjustResize"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

1

আপনি যদি টুকরো টুকরো হয়ে থাকেন তবে আপনার ক্রিয়াকলাপে আপনাকে নীচের কোডটি আপনার অনক্রিটে যুক্ত করতে হবে এটি আমার জন্য সমস্যা সমাধান করে

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

1

আপনার ম্যানিফেস্ট ফাইলটিতে নীচের লাইনটি যুক্ত করুন। এটা কাজ করবে

<activity name="MainActivity"
    android:windowSoftInputMode="stateVisible|adjustResize">
    ...
</activity>

1

আমি কেবলমাত্র শীর্ষ স্তরের বিন্যাসে এবং সমস্ত কিছু কাজ করে নিচের লাইনটি যুক্ত করেছি:

android:fitsSystemWindows="true"

@ yash786 সম্ভবত সম্পাদনা নীচের বোতামটি দেখানো হচ্ছে যা একটি ফোকাস পেয়েছে? দ্বিতীয় প্রশ্ন আপনি কী আপনার লেআউট ফাইলটি ভাগ করতে পারেন বা কীভাবে উত্তরটি আপনি কী কীবোর্ডের শীর্ষ সম্পাদনাতে যুক্ত করতে পারেন?
Heroes84

এটি অ্যান্ড্রয়েড ছাড়াই আমার ইভেন্টের জন্য কাজ করে: উইন্ডোসোফটআইনপুটমোড = "স্টেটভিজিবল | অ্যাডজাস্টারাইজ করুন"
জুম

0

ঠিক আছে এটি খুব দেরিতে তবে আমি আবিষ্কার করেছি যে আপনি যদি নিজের সম্পাদনা পাঠ্যের অধীনে একটি তালিকা ভিউ যুক্ত করেন তবে কীবোর্ড তালিকা সম্পাদনা না করে সেই সম্পাদনাটির অধীনে সমস্ত বিন্যাস সরিয়ে ফেলবে

<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"



/>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"//can make as 1dp
    android:layout_below="@+id/et" // set to below editext
    android:id="@+id/view"
    >
**<any layout**

এটি আমার জন্য কাজ করা একমাত্র সমাধান।


0

একটি পরামর্শই আমার সমস্যা সমাধান করে না। অ্যাডজাস্ট প্যান প্রায় কাজ ঠিকঠাক আকার পরিবর্তন । যদি আমি লেআউটটি উপরে না সরানো ছাড়া কিছুই সামঞ্জস্য করি তবে এটি নীচে আমার সম্পাদনাটি গোপন করে যা আমি স্বচ্ছভাবে লিখছি। সুতরাং 24 ঘন্টা অবিচ্ছিন্ন অনুসন্ধানের পরে আমি এই উত্সটি পেয়েছি এবং এটি আমার সমস্যার সমাধান করে।


0

দেরি হতে পারে তবে আমি কয়েকটি জিনিস যুক্ত করতে চাই। অ্যান্ড্রয়েড স্টুডিও সংস্করণ 4.0.০.১ এবং গ্রেডল সংস্করণ .1.১.১ এ, windowSoftInputMode আপনি যদি আপনার ক্রিয়াকলাপে নিম্নলিখিত পতাকাগুলি যুক্ত করে থাকেন তবে প্রত্যাশা অনুযায়ী কাজ করবে না:

getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
        );

অনেক সময় নষ্ট করার পরে, আমি খুঁজে পেয়েছি যে হ্যাক। সঠিকভাবে কাজ করার জন্য adjustResizeবা AdjustPanকোনও বৈশিষ্ট্যের জন্য windowSoftInputMode, আপনাকে এটিকে আপনার ক্রিয়াকলাপ থেকে সরিয়ে ফেলতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.