Программно скрыть / показать программную клавиатуру Android [дубликат]




Возможные Дубликаты:
закрыть / скрыть программную клавиатуру Android






Первое, что я уже видел этой нить. Я попробовал принятые методы, приведенные там..Но у меня ничего не получалось..



у меня есть два экрана в мое приложение.




  • первый из них имеет 2 EditText - один для имени пользователя и один для пароля

  • второй имеет один ListView и EditText-to фильтр
    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. на второй странице Я хочу, чтобы клавиатура была скрыта сначала, только чтобы появиться
    когда пользователь касается editText


и моя проблема в том, что я получаю прямо противоположное в обоих случаях...Надеюсь, кто-то сталкивался с этой проблемой раньше..Кстати, я тестирую на симуляторе и телефоне HTC Desire..



ОКОНЧАТЕЛЬНЫЙ РЕЗУЛЬТАТ



Ну, я получил это работает, с помощью всех друзей здесь.



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 В. Это сделало трюк



<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 в обоих случаях. Поэтому я назначаю ему награду..Спасибо всем остальным друзьям
который пытался мне помочь..

953   4  

4 ответов:

добавить это в ваш код 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>

Если вы ищете более красноречивое решение, я нашел этой вопрос, который может помочь вам, это не так просто, как решение выше, но, вероятно, лучшее решение. Я не проверял его, но он, по-видимому, работает. Я думаю, что это похоже на решение, которое вы пробовали, которое не сработало для вас.

надеюсь, это то, что вы ищете.

Ура!

обновление 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 file

<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

попробуйте этот код.

для показа 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);
    }

ты InputMethodManager.SHOW_IMPLICIT в первом окне.

а для скрытия во втором окне используйте InputMethodManager.HIDE_IMPLICIT_ONLY

EDIT:

если он все еще не работает, то, вероятно, вы ставите его в неправильном месте. Переопределить onFinishInflate() и показать/спрятать там.

@override
public void onFinishInflate() {
     /* code to show keyboard on startup */
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(mUserNameEdit, InputMethodManager.SHOW_IMPLICIT);
}

Comments

    Ничего не найдено.