0

私は現在 Android アプリケーションに取り組んでおり、このアプリケーションを最初にロードすると、TabHost を使用してアプリケーションのさまざまなビュー (アクティビティ) が表示されます。そのため、ロードすると、ユーザーが数字を入力できるビューが表示されるため、ソフトキーボードが自動的に表示されます。

最初は、ユーザーがアプリケーションの他のタブに移動すると、EditText フィールドがない場合にキーボードが消えると思いましたが、キーボードは残り、数字パッドから標準のテキスト キーボードに切り替わり、それを閉じる唯一の方法はデバイスの戻るボタンをクリックします。これはユーザーフレンドリーではなく、ユーザーが別のタブに切り替えるとキーボードが閉じる必要があるため、私が望むものではありません。

現在画面上でキーボードが開いている場合、キーボードを閉じる必要がある以下のコードを作成しました。

private OnTabChangeListener MyOnTabChangeListener = new OnTabChangeListener(){
        @Override

            public void onTabChanged(String tabId) {
            Log.d("TAG", "I am Inside the Tab Changed Function!!");
                if(getTabHost().getCurrentTabTag().equals("SecondTab")) {
                    Log.d("TAG", "I am Inside the SecondTab Section!!");

                    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
                    if(imm != null)
                    { 
                        Log.d("TAG", "I am Inside the SecondTab imm null!!");
                        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
                    }

                }
                if(getTabHost().getCurrentTabTag().equals("FirstTab")) {
                    Log.d("TAG", "I am Inside the FirstTab Section!!");


                    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
                    if(imm != null)
                    { 
                        Log.d("TAG", "I am Inside the FirstTab imm null!!");
                        imm.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); 
                    } 

                }
            }


    };

上記のコードは、2 番目のタブに移動し、最初のタブでキーボードが開いているかのように機能しますが、3 番目のタブに移動してから 2 番目のタブに戻ると、キーボードが再び開きます最初のタブのキーボードだけが必要なので、これは望ましくありません。

ソフトキーボードを制御するだけでとても難しいとは信じられないので、誰か助けてください。

前もって感謝します

編集....

SecondTab クリック リスナー内で以下のコードを使用してみましたが、うまくいきませんでした。

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
                    if(imm != null)
                    { 
                        Log.d("TAG", "I am Inside the SecondTab imm null!!");
                        imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); 
                    }

編集2.....

以下の最初の応答に感謝しますが、それをアクティビティ自体に追加しようとしましたが、何らかの理由で機能しませんでした:SI はまた、いくつかの異なることを試しましたが、運が悪く、マニフェスト ファイルに以下を追加しましたが、これは機能しませんでした。 t不可解な作業:s

android:windowSoftInputMode="stateHidden"

それはうまくいくはずでしたが、うまくいきませんでした。これは本当に面倒です。私のマニフェスト ファイルの一部は次のとおりです。

 <application
        android:allowBackup="true"
        android:icon="@drawable/logo"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".TabActivityTop"
            android:label="@string/app_name" android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="Tab1" android:screenOrientation="portrait"></activity>
        <activity android:name="Tab2" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden"></activity>
        <activity android:name="Tab3" android:screenOrientation="portrait"></activity>
        <activity android:name="Tab4" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden"></activity>
    </application>

それが役立つ場合は、以下の完全な TabActivityTop.java ファイルも含めました。

import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.inputmethod.InputMethodManager;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabSpec;

public class TabActivityTop extends TabActivity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TabHost tabHost = getTabHost();

        TabSpec tab1spec = tabHost.newTabSpec("Tab1");
        tab1spec.setIndicator("", getResources().getDrawable(R.drawable.icon_tab1_tab));
        Intent tab1Intent = new Intent(this, tab1.class);
        tab1spec.setContent(tab1Intent);

        TabSpec tab2spec = tabHost.newTabSpec("");
        tab2spec.setIndicator("", getResources().getDrawable(R.drawable.icon_tab2_tab));
        Intent tab2Intent = new Intent(this, tab2.class);
        tab2spec.setContent(tab2Intent);

        TabSpec tab3spec = tabHost.newTabSpec("");
        tab3spec.setIndicator("", getResources().getDrawable(R.drawable.icon_tab3_tab));
        Intent tab3Intent = new Intent(this, tab3.class);
        tab3spec.setContent(tab3Intent);

        TabSpec tab4spec = tabHost.newTabSpec("Tab4");
        tab4spec.setIndicator("", getResources().getDrawable(R.drawable.icon_tab4_tab));
        Intent tab4Intent = new Intent(this, tab4.class);
        tab4spec.setContent(tab4Intent);

        tabHost.setOnTabChangedListener(MyOnTabChangeListener);

        // Adding all TabSpec to TabHost
        tabHost.addTab(tab1);
        tabHost.addTab(tab2);
        tabHost.addTab(tab3);
        tabHost.addTab(tab4);
    }

    private OnTabChangeListener MyOnTabChangeListener = new OnTabChangeListener(){
        @Override

            public void onTabChanged(String tabId) {
            Log.d("TAG", "I am Inside the Tab Changed Function!!");
                if(getTabHost().getCurrentTabTag().equals("contact")) {
                    Log.d("TAG", "I am Inside the Tab4 Section!!");

                    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
                    if(imm != null)
                    { 
                        Log.d("TAG", "I am Inside the imm null!!");
                        imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); 
                    }

                }
                if(getTabHost().getCurrentTabTag().equals("Tab1")) {
                    Log.d("TAG", "I am Inside the Tab1 Section!!");
                }
            }

    };


}

誰かがこれで私を助けてくれることを本当に願っています:)

4

1 に答える 1

0

このようにしてみてください:

 InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 inputMethodManager.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

または使用してみてください:

 rootLayout.requestFocus();
于 2013-01-29T09:43:18.737 に答える