2017-05-22 18 views
0
private void openInput(View v, String nickname) { 
    if (popInputNickName == null) { 
     View view = LayoutInflater.from(UserInfoActivity.this).inflate(R.layout.pop_nickname_modify, null); 
     popInputNickName = new InputPopWindow(view, LinearLayout.LayoutParams.MATCH_PARENT 
       , LinearLayout.LayoutParams.WRAP_CONTENT, true); 
     popInputNickName.setAnimationStyle(R.style.NewContentAnim); 
     popInputNickName.setBackgroundDrawable(new BitmapDrawable()); 
     popInputNickName.setFocusable(true); 
     popInputNickName.setTouchable(true); 
     popInputNickName.setOutsideTouchable(true); 

     edit_nickname = (EditText) view.findViewById(R.id.edit_pop_nickname); 
     text_commit = (TextView) view.findViewById(R.id.text_pop_commit); 
     text_cancel = (TextView) view.findViewById(R.id.text_pop_cancel); 

     if (!TextUtils.isEmpty(nickname)) { 
      edit_nickname.setText(nickname); 
     } 

     text_commit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String nickName = edit_nickname.getText().toString().trim(); 
       if (!TextUtils.isEmpty(nickName)) { 
        modifyNickName(nickName); 
       } else { 
        ToastUtil.Infotoast(UserInfoActivity.this, getString(R.string.null_nickname)); 
       } 
      } 
     }); 

     text_cancel.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       popInputNickName.dismiss(); 
      } 
     }); 
    } else { 
     if (!TextUtils.isEmpty(nickname)) { 
      edit_nickname.setText(nickname); 
     } 
    } 

    popInputNickName.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
    popInputNickName.showAtLocation(v, Gravity.BOTTOM, 0, 0); 
    edit_nickname.requestFocus(); 
    InputMethodManager imm = (InputMethodManager) edit_nickname.getContext() 
      .getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED); 
    openInputTime = System.currentTimeMillis(); 
} 

the popwindow showなぜ私が活動に入ると活動

を終了したときに、短い時間のために、画面の黒を作るPopWindow(Aそれを呼び出す)&は、ユーザーのニックネームを変更するpopwindowを示しています。私がAを終えると、画面はしばらく黒くなります。しかし、Aと入力してpopwindowを開いていないと、黒い画面は表示されず、正常に完了します。だから私はこの問題の原因とそれを修正する方法が不思議です。

+0

デバイス特有の問題のようですね。別のデバイスにビルドして報告し直してください。 –

+0

私はemulator_Nexus_5で自分のアプリをテストしましたが、この問題はまだ発生しました。 – humanheima

+0

質問が不明であることを大変申し訳ございません。最後に問題を解決しました。私はこの問題を引き起こしたカスタムビューを使用しました。 – humanheima

答えて

0

ご質問は明らかではありません。最後に私は問題を解決しました。私はこの問題を引き起こしたカスタムビューを使用しました.PopWindowのedit_nicknameはEditTextを拡張するカスタムビューです。上記のコードで

public class TfEditView extends EditText { 

private OnFinishComposingListener mFinishComposingListener; 

public TfEditView(Context context) { 
    super(context); 
} 

public TfEditView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public TfEditView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

public void setOnFinishComposingListener(OnFinishComposingListener listener) { 
    this.mFinishComposingListener = listener; 
} 

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
    return new MyInputConnection(super.onCreateInputConnection(outAttrs), false); 
} 


public class MyInputConnection extends InputConnectionWrapper { 

    public MyInputConnection(InputConnection target, boolean mutable) { 
     super(target, mutable); 
    } 

    @Override 
    public boolean finishComposingText() { 
     boolean finishComposing = super.finishComposingText(); 
     if (mFinishComposingListener != null) { 
      mFinishComposingListener.finishComposing(); 
     } 
     return finishComposing; 
    } 
} 


public interface OnFinishComposingListener { 
    void finishComposing(); 
} 

}

private long openInputTime = 0; 
private final long canHideTime = 500; 
private void openInput(View v, String nickname) { 
    if (popInputNickName == null) { 
     View view = LayoutInflater.from(UserInfoActivity.this).inflate(R.layout.pop_nickname_modify, null); 
     popInputNickName = new InputPopWindow(view, LinearLayout.LayoutParams.MATCH_PARENT 
       , LinearLayout.LayoutParams.WRAP_CONTENT, true); 
     popInputNickName.setAnimationStyle(R.style.NewContentAnim); 

     popInputNickName.setBackgroundDrawable(new BitmapDrawable()); 
     popInputNickName.setFocusable(true); 
     popInputNickName.setTouchable(true); 
     popInputNickName.setOutsideTouchable(true); 

     edit_nickname = (TfEditView) view.findViewById(R.id.edit_pop_nickname); 
     text_commit = (TextView) view.findViewById(R.id.text_pop_commit); 
     text_cancel = (TextView) view.findViewById(R.id.text_pop_cancel); 

     if (!TextUtils.isEmpty(nickname)) { 
      edit_nickname.setText(nickname); 
     } 
     edit_nickname.setOnFinishComposingListener(new TfEditView.OnFinishComposingListener() { 
      @Override 
      public void finishComposing() { 
       if (popInputNickName != null && popInputNickName.isShowing() && openInputTime != 0 && (System.currentTimeMillis() - openInputTime > canHideTime)) { 
        popInputNickName.dismiss(); 
       } 
      } 
     }); 

     text_commit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String nickName = edit_nickname.getText().toString().trim(); 
       if (!TextUtils.isEmpty(nickName)) { 
        modifyNickName(nickName); 
       } else { 
        ToastUtil.Infotoast(UserInfoActivity.this, getString(R.string.null_nickname)); 
       } 
      } 
     }); 

     text_cancel.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       popInputNickName.dismiss(); 
      } 
     }); 
    } else { 
     if (!TextUtils.isEmpty(nickname)) { 
      edit_nickname.setText(nickname); 
     } 
    } 

    popInputNickName.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
    popInputNickName.showAtLocation(v, Gravity.BOTTOM, 0, 0); 
    edit_nickname.requestFocus(); 
    InputMethodManager imm = (InputMethodManager) edit_nickname.getContext() 
      .getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED); 
    openInputTime = System.currentTimeMillis(); 
} 

、popindowがpopwindowから500ミリ秒よりも長いを却下することができる示し始めます。