java - प्रोग्रामेटिक रूप से छुपाएं/एंड्रॉइड सॉफ्ट कीबोर्ड दिखाएं




android hide (3)

इस कोड को आज़माएं।

सॉफ़्टकीबोर्ड दिखाने के लिए:

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

छुपा सॉफ़्टकेबोर्ड के लिए -

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

संभावित डुप्लिकेट:
एंड्रॉइड सॉफ्ट कीबोर्ड को बंद / छुपाएं

पहली बात यह है कि मैंने पहले ही यह धागा देखा है। मैंने वहां दिए गए स्वीकार्य तरीकों की कोशिश की..लेकिन मेरे लिए कुछ भी काम नहीं किया ..

मेरे ऐप में दो स्क्रीन हैं।

  • पहले व्यक्ति के पास 2 एडिटटेक्स्ट है - उपयोगकर्ता नाम के लिए एक और पासवर्ड के लिए एक
  • सूची दृश्य को फ़िल्टर करने के लिए दूसरा एक सूची दृश्य और एक संपादन टेक्स्ट है

मेरी पहली स्क्रीन में, मैं स्टार्टअप और कीबोर्ड पर ध्यान केंद्रित करने के लिए उपयोगकर्ता नाम संपादन टेक्स्ट चाहता हूं .. यह मेरा कार्यान्वयन है (अनावश्यक / असंबंधित कोड को हटाकर सरलीकृत) ..

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()
}

खैर, कुंजीपटल शुरू होने पर नहीं दिख रहा है । और मेरे डिजाइन को वहां कीबोर्ड की बुरी तरह की आवश्यकता है ..

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

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. सेकेंड पेज पर मैं कीबोर्ड को पहले छिपाना चाहता हूं, केवल तब दिखने के लिए जब उपयोगकर्ता संपादन टेक्स्ट को स्पर्श करता है

और मेरी समस्या यह है कि मैं दोनों अवसरों पर बिल्कुल विपरीत हो रहा हूं ... उम्मीद है कि किसी को इस मुद्दे का सामना करना पड़ेगा .. बीटीडब्ल्यू मैं सिम्युलेटर और एचटीसी डिजायर फोन पर परीक्षण कर रहा हूं ..

अंतिम परिणाम

खैर, मैं इसे सभी दोस्तों की मदद से काम कर रहा हूं।

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);

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

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

मेरे लिए दूसरा समाधान साफ ​​दिखता था, इसलिए मैंने इसके साथ चिपकने का फैसला किया..लेकिन पहला व्यक्ति निश्चित रूप से काम करता है। इसके अलावा @ डायरिश के जवाब में एडिटटेक्स्ट को फोकस देने के लिए एडिटटेक्स्ट के नीचे स्क्रॉलव्यू का उपयोग करने का एक चालाक हैक है .. लेकिन मैंने कोशिश नहीं की है, लेकिन इसे काम करना चाहिए। हालांकि साफ नहीं है ..

2. गतिविधि शुरू करने पर कीबोर्ड छुपाने के लिए

केवल एक जवाब मेरे लिए काम करता है, जो @ डायरिश द्वारा प्रदान किया जाता है। और समाधान संपादन टेक्स्ट युक्त लेआउट के लिए 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> 

वैसे भी मैं दोनों मामलों में डायरिश के जवाब का उपयोग कर समाप्त होता हूं। तो मैं उन्हें बक्षीस दे रहा हूं..उन सभी अन्य दोस्तों का धन्यवाद जिन्होंने मेरी मदद करने की कोशिश की ..


इसे अपने कोड android:focusableInTouchMode="true" जोड़ना 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 पर कीबोर्ड दिखाना है। मैंने जो कुछ किया है, उसे .xml फ़ाइल के नीचे एक खाली स्क्रॉलव्यू जोड़ा गया है, यह पहला संपादन को फोकस में रखता है और कीबोर्ड को पॉप करता है। मैं मानता हूं कि यह एक हैक है, लेकिन मुझे लगता है कि आप इसे काम करना चाहते हैं। मैंने इसका परीक्षण किया है, और यह ठीक काम करता है।

<?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 प्रश्न मिल गया है जो आपकी मदद कर सकता है, यह उपरोक्त समाधान के रूप में उतना आसान नहीं है बल्कि शायद एक बेहतर समाधान है। मैंने इसका परीक्षण नहीं किया है लेकिन यह स्पष्ट रूप से काम करता है। मुझे लगता है कि यह आपके द्वारा किए गए समाधान के समान है जो आपके लिए काम नहीं करता है।

आशा है कि यह वही है जो आप खोज रहे हैं।

चीयर्स!


अद्यतन 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
    }

मैंने बहुत मेहनत की कोशिश की और समाधान ढूंढ लिया ... जब भी कोई नई गतिविधि शुरू होती है तो कीबोर्ड खुलता नहीं है लेकिन हम ऑनस्यूम में रननेबल का उपयोग कर सकते हैं और यह ठीक काम कर रहा है इसलिए कृपया इस कोड को आजमाएं और जांचें ...

अद्यतन 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();

जहां एड एडिटटेक्स्ट है





soft-keyboard