java - ويندوز - لوحة المفاتيح على الشاشة




برمجياً إخفاء/إظهار لوحة مفاتيح Android Soft (3)

ممكن تكرار:
إغلاق / إخفاء لوحة مفاتيح Android Soft

أول شيء أولا رأيت بالفعل هذا الموضوع. جربت الطرق المقبولة هناك .. ولكن لم يعمل شيء بالنسبة لي ..

لدي شاشتيْن في تطبيقي.

  • أول واحد لديك 2 EditText - واحد لاسم المستخدم وواحد لكلمة المرور
  • ثاني واحد يكون واحد ListView ، و EditText - لتصفية listView

في الشاشة الأولى ، أريد أن يكون اسم المستخدم EditText للتركيز على بدء التشغيل ويجب أن تكون لوحة المفاتيح مرئية .. هذا هو تنفيذي (مبسّط من خلال إزالة الرموز غير الضرورية / غير المرتبطة) ..

app_login.xml

<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:paddingLeft="20dip"  
    android:paddingRight="20dip">

    <EditText android:id="@+id/username" android:singleLine="true" 
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content" android:hint="Username"  
        android:imeOptions="actionDone" android:inputType="text"
        android:maxLines="1"/>

    <EditText android:id="@+id/password" android:password="true" 
        android:singleLine="true"  
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:hint="Password" />

</LinearLayout>

AppLogin.java

class AppLogin extends Activity{
    private EditText mUserNameEdit = null;
    private EditText mPasswordEdit = null;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.app_login);

        mUserNameEdit  =    (EditText) findViewById(R.id.username);
        mPasswordEdit  =    (EditText) findViewById(R.id.password);

        /* code to show keyboard on startup.this code is not working.*/
        InputMethodManager imm =  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(mUserNameEdit, InputMethodManager.SHOW_IMPLICIT);

    }//End of onCreate()
}

حسنا ، لوحة المفاتيح لا تظهر عند بدء التشغيل . ويحتاج تصميمي بشدة إلى لوحة مفاتيح هناك ..

الآن إلى الصفحة الثانية .. أنا بالفعل قلت أن لدي listView و EditText هناك .. أريد أن تكون لوحة المفاتيح مخفية عند بدء التشغيل فقط لتظهر عندما يلامس المستخدم editText .. هل تصدق ذلك؟ مهما حاولت لوحة المفاتيح الناعمة تظهر عندما أقوم بتحميل النشاط .. أنا غير قادر على إخفائه ..

app_list_view.xml

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical" >
    <EditText android:id="@+id/filter_edittext"       
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:hint="Search" android:inputType="text" android:maxLines="1"/>
    <ListView android:id="@id/android:list" android:layout_height="fill_parent"
        android:layout_weight="1.0" android:layout_width="fill_parent" 
        android:focusable="true" android:descendantFocusability="beforeDescendants"/>
</LinearLayout>     

AppList.java

public class MyListActivity extends ListActivity{
   private EditText mfilterEditText;

    @Override
   public void onCreate(Bundle savedInstanceState) {        
      super.onCreate(savedInstanceState);
      setContentView(R.layout.app_list_view);

      mFilterEditText  =  (EditText) findViewById(R.id.filter_edittext);
      InputMethodManager imm = InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.hideSoftInputFromWindow(mFilterEditText.getWindowToken(), 0);
   }
}

للتبسيط

  1. على صفحة تسجيل الدخول (الصفحة الأولى) أريد أن تكون لوحة المفاتيح مرئية عند بدء التشغيل ..
  2. على SecondPage أريد إخفاء لوحة المفاتيح أولاً ، فقط للظهور عندما يلمس المستخدم editText

ومشكلتي هي أنني أتوقع العكس بالضبط في كلتا المناسبتين ... أمل شخص ما واجه هذه المشكلة من قبل .. BTW أنا اختبار على جهاز محاكاة وهتك HTC الهاتف ..

الحصيلة النهائية

حسنًا ، لقد عملت ذلك بمساعدة جميع الأصدقاء هنا.

1. لعرض لوحة المفاتيح عند بدء التشغيل

عملت إجابتين بالنسبة لي. واحد قدمهCapDroid ، وهو استخدام معالج وإرساله مؤخرًا ..

mUserNameEdit.postDelayed(new Runnable() {
  @Override
  public void run() {
    // TODO Auto-generated method stub
    InputMethodManager keyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    keyboard.showSoftInput(mUserNameEdit, 0);
  }
},50);

يتم تقديم الإجابات الثانية من قبلDyarish ، في الواقع أنه ربط موضوع SO آخر ، وهو ما لم أر من قبل. ولكن الشيء المضحك هو أن هذا الحل موجود في الخيط الذي أشرت إليه في البداية. وأنا لم أجربه لأنه لم يكن لديه أصوات في خيط حيث كل المشاركات الأخرى لديها الكثير من الأصوات .. ارتفاع الحماقة ..

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

بالنسبة لي ، بدا الحل الثاني أنيقًا ، لذا قررت التمسك به .. لكن أولًا يعمل بالتأكيد. أيضا @ @ Dyarish تحتوي على الاختراق ذكية من استخدام ScrollView أدناه EditText لإعطاء EditText التركيز ... ولكن لم أجربه ، ولكن يجب أن تعمل. ليس أنيق رغم ذلك ..

2. لإخفاء لوحة المفاتيح عند بدء النشاط

عملت إجابة واحدة فقط بالنسبة لي ، والتي تقدمهاDyarish. والحل هو استخدام إعدادات focusableInTouchMode في xml للتخطيط الذي يحتوي على editText's. هذا لم الحيلة

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical" android:focusableInTouchMode="true">
    <EditText android:id="@+id/filter_edittext"       
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:hint="Search" android:inputType="text" android:maxLines="1"/>
    <ListView android:id="@id/android:list" android:layout_height="fill_parent"
        android:layout_weight="1.0" android:layout_width="fill_parent" 
        android:focusable="true" android:descendantFocusability="beforeDescendants"/>
</LinearLayout> 

على أي حال أنا في نهاية المطاف باستخدام الإجابة Dyarish في كلتا الحالتين. لذا فأنا أمنحه الفضل له .. أشكر جميع الأصدقاء الذين حاولوا مساعدتي ..


إضافة هذا إلى android:focusableInTouchMode="true" سوف يتأكد من أن لوحة المفاتيح الخاصة بك لا تظهر عند بدء التشغيل لمربع edittext. تريد إضافة هذا الخط إلى التخطيط الخطي الذي يحتوي على EditTextBox. يجب أن تكون قادرًا على اللعب مع هذا لحل مشكلتك. لقد اختبرت هذا. حل بسيط.

أي: في ملف app_list_view.xml الخاص بك

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:focusableInTouchMode="true">
    <EditText 
        android:id="@+id/filter_edittext"       
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:hint="Search" 
        android:inputType="text" 
        android:maxLines="1"/>
    <ListView 
        android:id="@id/android:list" 
        android:layout_height="fill_parent"
        android:layout_weight="1.0" 
        android:layout_width="fill_parent" 
        android:focusable="true" 
        android:descendantFocusability="beforeDescendants"/>
</LinearLayout> 

------------------ تحرير: لجعل لوحة المفاتيح تظهر عند بدء التشغيل -----------------------

هذا لجعلها تظهر لوحة المفاتيح على اسم المستخدم edittextbox عند بدء التشغيل. كل ما قمت به هو إضافة Scrollview فارغة إلى أسفل ملف .xml ، وهذا يضع edittext الأول في التركيز وينبثق لوحة المفاتيح. أعترف أن هذا هو الاختراق ، لكنني أفترض أنك تريد فقط أن يعمل هذا. لقد اختبرت ذلك ، وهو يعمل بشكل جيد.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="20dip"  
    android:paddingRight="20dip">
    <EditText 
        android:id="@+id/userName" 
        android:singleLine="true" 
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content" 
        android:hint="Username"  
        android:imeOptions="actionDone" 
        android:inputType="text"
        android:maxLines="1"
       />
    <EditText 
        android:id="@+id/password" 
        android:password="true" 
        android:singleLine="true"  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:hint="Password" />
    <ScrollView
        android:id="@+id/ScrollView01"  
        android:layout_height="fill_parent"   
        android:layout_width="fill_parent"> 
    </ScrollView>
</LinearLayout>

إذا كنت تبحث عن حل أكثر بليغًا ، فقد وجدت this السؤال الذي قد يساعدك ، فهو ليس بسيطًا مثل الحل أعلاه ولكن ربما حلًا أفضل. لم أختبره ولكن يبدو أنه يعمل. أعتقد أنه مشابه للحل الذي جربته ولم ينجح معك.

نأمل أن يكون هذا هو ما كنت أبحث عنه.

في صحتك!


جرب هذا الكود.

لإظهار Softkeyboard:

InputMethodManager imm = (InputMethodManager)
                                 getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null){
        imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
    }

للاختباء SoftKeyboard -

InputMethodManager imm = (InputMethodManager)
                                  getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null){
        imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
    }

تحديث 2

@Override
    protected void onResume() {
        super.onResume();
        mUserNameEdit.requestFocus();

        mUserNameEdit.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                InputMethodManager keyboard = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
                keyboard.showSoftInput(mUserNameEdit, 0);
            }
        },200); //use 300 to make it run when coming back from lock screen
    }

حاولت جاهدا واكتشفت حلا ... عندما يبدأ نشاط جديد ثم لا يمكن فتح لوحة المفاتيح ولكن يمكننا استخدام Runnable في onResume وأنها تعمل بشكل جيد لذا يرجى محاولة هذا الرمز وتحقق ...

تحديث 1

إضافة هذا الخط في AppLogin.java الخاص بك

mUserNameEdit.requestFocus();

وهذا الخط في AppList.java الخاص بك

listview.requestFocus()'

بعد التحقق من طلبك إذا كان لا يعمل ، أضف هذا السطر في ملف AndroidManifest.xml الخاص بك

<activity android:name=".AppLogin" android:configChanges="keyboardHidden|orientation"></activity>
<activity android:name=".AppList" android:configChanges="keyboard|orientation"></activity>

إجابة أصلية

 InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE);

لإخفاء لوحة المفاتيح

 imm.hideSoftInputFromWindow(ed.getWindowToken(), 0); 

لعرض لوحة المفاتيح

 imm.showSoftInput(ed, 0);

للتركيز على EditText

 ed.requestFocus();

حيث ed هو EditText







soft-keyboard