समायोजन और समायोजन के बीच अंतर Android में?


136

मैंने एक कोड लिखने की कोशिश की, जो सॉफ्ट-कीबोर्ड दिखाई देने पर यूआई घटकों को फिर से आकार देने के लिए उपयोग किया जाता है । जब मैं AdjustResize का उपयोग करता हूं, तो यह UI घटकों को फिर से आकार देता है और उसी समय समायोजनपा ने मुझे समान आउटपुट दिया। मैं उनके बीच अंतर जानना चाहता हूं और प्रत्येक घटक का उपयोग कब करना है? UI का आकार बदलने के लिए कौन सा एक (एडजस्टमेंट या एडजस्टमेंट) अच्छा है?

यहाँ मेरा xml है:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="vertical" >

            <EditText
                android:id="@+id/editText5"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="45dp"
                android:ems="10"
                android:inputType="textPersonName" />

            <Button
                android:id="@+id/button1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="40dp"
                android:text="My Button" />
        </LinearLayout>
    </RelativeLayout>

</ScrollView>

और मेनिफेस्ट फ़ाइल:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.adjustscroll"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.adjustscroll.MainActivity"
            android:label="@string/app_name"
            android:windowSoftInputMode="adjustPan|adjustResize" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

जवाबों:


237

से Android डेवलपर साइट लिंक

"AdjustResize"

स्क्रीन पर सॉफ्ट कीबोर्ड के लिए जगह बनाने के लिए गतिविधि की मुख्य विंडो को हमेशा आकार दिया जाता है।

"AdjustPan"

सॉफ्ट कीबोर्ड के लिए जगह बनाने के लिए गतिविधि की मुख्य विंडो का आकार बदला नहीं गया है। बल्कि, विंडो की सामग्री स्वचालित रूप से पैंड की जाती है ताकि कीबोर्ड द्वारा वर्तमान फोकस को कभी भी अस्पष्ट न किया जाए और उपयोगकर्ता हमेशा देख सकें कि वे क्या टाइप कर रहे हैं। यह आमतौर पर आकार बदलने की तुलना में कम वांछनीय है, क्योंकि उपयोगकर्ता को विंडो के अस्पष्ट भागों के साथ आने और बातचीत करने के लिए नरम कीबोर्ड को बंद करने की आवश्यकता हो सकती है।

अपनी टिप्पणी के अनुसार, अपनी गतिविधि प्रकट में निम्नलिखित का उपयोग करें

<activity android:windowSoftInputMode="adjustResize"> </activity>

1
आपके अच्छे उत्तर के लिए धन्यवाद। अब मुझे अपने UI के साथ समस्या हो रही है। मेरे पास एक लेआउट है और मेरे लेआउट के नीचे एक बटन है। मैं सॉफ्ट-कीबोर्ड के ऊपर उन लोगों को दिखाना चाहता हूं जब सॉफ्ट-कीबोर्ड दिखाई देता है। इसे कैसे प्राप्त किया जा सकता है। क्या आप इस समस्या को हल करने में मेरी मदद कर सकते हैं?
Androidcodehunter

1
यह मेरे लिए काम नहीं कर रहा है। वास्तव में मैं क्या चाहता था: मैं एडिटेक्स और बटन को सॉफ्ट-कीबोर्ड के ऊपर दिखाना चाहता हूं जब मैं एडिटेक्स फील्ड में कुछ लिखने की कोशिश करता हूं। मैंने आपके समाधान की कोशिश की, लेकिन काम नहीं किया।
Androidcodehunter

उफ़ .. यह मेरे लिए काम किया .. वैसे भी .. क्या स्क्रोलव्यू का उपयोग करना संभव है?
स्टाइनपाइक

2
UI को पुन: आकार देने के लिए उपलब्ध होने पर केवल तभी समाधान प्रदान करें, लेकिन यदि मैं 5 और एडिटेक्स लगाता हूं तो यह काम नहीं कर सकता है। क्या यू-री-आकार में उपलब्ध नहीं होने पर सॉफ्ट-कीबोर्ड के ऊपर बटन और एडिटेक्स दिखाना संभव है। वास्तव में सवाल यह है कि जब मैं इस समस्या का परीक्षण कर रहा हूं।
Androidcodehunter

1
@support_ms क्यों ~ "एडजस्ट करने के लिए एडजस्टमेंट को समायोजित करें" आवश्यक है?
इगोरगानपोलस्की

30

समायोजित करें = पृष्ठ सामग्री का आकार बदलें

समायोजन पृष्ठ सामग्री को आकार दिए बिना पृष्ठ सामग्री को स्थानांतरित करें


बहुत बढ़िया व्याख्या!
व्लाद

16

जब मैं शुरुआती था, तब मुझे समायोजन और समायोजन के बीच भी थोड़ी उलझन हुई। ऊपर दी गई परिभाषाएँ सही हैं।
समायोजित करें: मुख्य गतिविधि की सामग्री को सॉफ्ट इनपुट यानी कीबोर्ड
एडजस्टमेंट के लिए जगह बनाने के लिए आकार दिया गया है : विंडो की समग्र सामग्री का आकार बदलने के बजाय, यह केवल सामग्री को पान करता है ताकि उपयोगकर्ता हमेशा देख सके कि वह क्या टाइप कर रहा है
समायोजन: सुखद नाम जैसा कि कुछ भी नहीं है resized या panned। कीबोर्ड खोल दिया जाता है, भले ही वह सामग्री छिपा रहा हो या नहीं।

मेरे पास बेहतर समझ के लिए एक उदाहरण है
नीचे मेरी xml फ़ाइल है:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:hint="Type Here"
        app:layout_constraintTop_toBottomOf="@id/button1"/>


    <Button
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button1"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/button2"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginBottom="@dimen/margin70dp"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@id/button1"
        app:layout_constraintEnd_toStartOf="@id/button3"
        android:layout_marginBottom="@dimen/margin70dp"/>

    <Button
        android:id="@+id/button3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button3"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/button2"
        android:layout_marginBottom="@dimen/margin70dp"/>
</android.support.constraint.ConstraintLayout>

यहाँ नीचे दिए गए उदाहरण के लिए xml AdjustResize का डिज़ाइन दृश्य है : AdjustPan उदाहरण नीचे: AdjustNothing उदाहरण नीचे:
मूल दृश्य


समायोजित करें उदाहरण


समायोजन उदाहरण


समायोजित करने योग्य उदाहरण


9

जैसा कि डॉक्टर कहते हैं कि सही मूल्य संयोजन को भी ध्यान में रखें:

सेटिंग को निम्न तालिका में सूचीबद्ध मानों में से एक होना चाहिए, या एक "राज्य ..." मान प्लस एक "समायोजित ..." मान का एक संयोजन होना चाहिए। समूह में कई मान सेट करना - कई "स्थिति ..." मान, उदाहरण के लिए - अपरिभाषित परिणाम हैं। व्यक्तिगत मूल्यों को एक ऊर्ध्वाधर बार (|) द्वारा अलग किया जाता है। उदाहरण के लिए:

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

काम नहीं कर रहा है, मेरी स्क्रीन सॉफ्ट इनपुट के पीछे जा रही है
एमएसडी

6

आप android:windowSoftInputMode="stateAlwaysHidden|adjustResize"अपनी वर्तमान गतिविधि के लिए AndroidManifest.xml में उपयोग कर सकते हैं , और android:fitsSystemWindows="true"शैलियों या रूटलैट में उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.