13

問題を解決するために多くの時間が費やされ、それは簡単に見えますが、私は本当に疲れていて、解決策を見つけることができませんでした。アクティビティがあり、アクティビティには4つのEditTextコンポーネントがあり、そのうちの2つにはリストを含むポップアップメニュー(AlertDialog)があり、次の1つは編集が無効になっており、最後の1つは編集可能であり、ユーザーがそれをタップします。

また、私のルートLinearLayoutには、RelativeLayout内に含まれるLinearLayoutがあります。最後はAdvBannerの必要性です。最後のLinearLayout(RelativeLayout)は、ルートレイアウトの下部に配置されます。

それを説明するXMLの部分:

  <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_gravity="bottom"
      android:focusable="false"
      android:focusableInTouchMode="false" 
      android:gravity="bottom">
  <RelativeLayout 
      android:id="@+id/AdvLayoutReserveArea" 
      android:layout_width="fill_parent" 
      android:layout_height="50dp" 
      android:background="#FFFFFF"
      android:focusable="false"
      android:focusableInTouchMode="false" 
      android:gravity="bottom" /> 
  </LinearLayout>

アクティビティが開始されると、編集可能なEditTextは緑色の境界線でフォーカスを持ちカーソルが点滅します。残り数秒後、AdvBannerがロードされて表示されます。それが起こると、編集可能なEditTextはフォーカスを失いました。この瞬間から、私の人生は悪夢のようになります。

ステップバイステップで見てみましょう。

問題1. この瞬間(Advがロードされて表示されたとき)でユーザーがソフトキーボードを介してEditTextフィールドを編集している場合、フォーカスが失われ、境界線が灰色なり、ユーザーがテキストを入力し続けると結果が得られません-記号は印刷されません(EditTextのCURSORが失われすぎています)。

テキストを入力しているときにカーソルが非アクティブになっていると、どのユーザーもイライラするだろうと思います。バックグラウンドでいくつかのadvが読み込まれ、自分自身にフォーカスが移るからです。

これを解決するために、Advがロードされたときのメソッド(表示)で、requestFocusメソッドを使用して手動でEditTextにフォーカスを戻そうとします。

public void onAdLoaded() 
    {
// TODO Auto-generated method stub
// add app specific code for this event here...
// called when an ad is successfully displayed on device            
    CountEdit1.requestFocus();
}

はい、カーソルはEditTextフィールドに戻ります。ソフトキーボードがアクティブな場合でも、ユーザーはテキストを入力できますが、EditTextフィールドの境界線は灰色のままです...

注:実際には、フォーカスされたEditTextのGREENとGRAYの境界線の違いについてはわかりません。GREENは通常、ユーザーがそれをタップしているときであり、GRAYは、おそらく手動でフォーカスを要求するときです(requestFocus()などを使用)。 )。

問題2。(溶媒和問題#1の結果として)。ソフトキーボードを閉じた後、ユーザーが編集可能なEditTextフィールドをタップすると、フォーカスが移動してカーソルが内部に表示されますが、ソフトキーボードを再度表示しても反応はありません。それをタップしてもソフトキーボードは表示されませんが、コピーモードの編集フィールドのように見えます-ユーザーがテキストを選択してクリップボードにカット/コピーできる場合。

私の目標は一見簡単です。ソフトキーボードが表示され、ユーザーがテキストを入力しているときに、カーソルを保存して編集可能なEditTextフィールド(CountEdit1)にフォーカスしたいだけです。そして、ユーザーがEditTextをタップしたときの通常の反応-いつものように、ソフトキーボードを見せてください!

ここですべての問題を読み、さまざまなメソッド(clearFocus、requestFocusFromTouchなど)を組み合わせましたが、これを解決するために試みたすべてのことを説明するのに十分な時間とスペースがありませんでした。主な問題は上記のとおりです。

助けと問題の解決を願っています...よろしくお願いします。

4

5 に答える 5

18

目標は解決され、回避策は私が思っていたよりも簡単です。問題#2は、onClick()メソッドを使用して修正されます。clearFocus()メソッドとrequestFocus()メソッドの両方を使用するソフトキーボードが表示されるための十分な条件。

   CountEdit1.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v)
      {
              CountEdit1.clearFocus();
        CountEdit1.requestFocus();
      }
    });

ユーザーがEditTextフィールドをタップすると、ソフトキーボードが表示されます。修理済み。

于 2012-07-02T00:47:06.287 に答える
8

私のために働く:

InputMethodManager mgr = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
editField.requestFocus();
mgr.showSoftInput(editField, InputMethodManager.SHOW_IMPLICIT);
于 2012-11-02T11:14:56.067 に答える
5
userInput.post(new Runnable() {
            public void run() {
                userIdInput.requestFocus();

            }
        });

これを試して、問題がまだ解決されていないかどうかを確認してください。

于 2012-07-01T12:23:26.470 に答える
1

ビューがフラグメントまたはアクティビティで作成された後、フォーカスを要求する必要があります。

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    CountEdit1.requestFocus();
}
于 2014-06-30T12:38:05.723 に答える
1

これを試して:

public void onAdLoaded() 
    {  
  final Handler handler = new Handler();
             handler.postDelayed(new Runnable() {
                 @Override
                 public void run() {
                     CountEdit1.requestFocus();
                     InputMethodManager mgr = (InputMethodManager) base.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                     mgr.showSoftInput(CountEdit1, InputMethodManager.SHOW_IMPLICIT);
                     CountEdit1.setSelection(CountEdit1.getText().length());
                 }
             },0);
}
于 2016-06-15T11:50:32.973 に答える