该方案已经线上验证
将题主自定义布局替换为如下Dialog的布局. show()的时候延迟100毫秒显示。
package com.component.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.component.constant.DataContans;
import com.component.itface.OnItemClickRecyclerListener;
import com.component.util.CheckTextUtil;
import com.component.util.ScreenUtil;
import com.component.util.SoftKeyBoardListener;
import com.core.toaster.Toaster;
import com.ftoutiao.component.R;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class ChatEditDialog extends Dialog implements View.OnClickListener {
private Context mContext;
RelativeLayout ll_all;
private Activity activity;
private TextView send;
private EditText et_content;
private OnItemClickRecyclerListener onItemClickRecyclerListener;
/**
* 判断是否 需要 去除上次遗留的评论
*/
private int chatId = 0;
public ChatEditDialog(Context context, Activity mContext) {
super(context);
this.mContext = context;
this.activity = mContext;
}
public void setOnItemClickRecyclerListener(OnItemClickRecyclerListener onItemClickRecyclerListener) {
this.onItemClickRecyclerListener = onItemClickRecyclerListener;
}
public void setHintEditStr(String name) {
if (TextUtils.isEmpty(name)) {
et_content.setHint(activity.getResources().getString(R.string.send_comment_text));
send.setText(activity.getResources().getString(R.string.send_text));
} else {
et_content.setHint(activity.getResources().getString(R.string.chat_hui) + name);
send.setText(activity.getResources().getString(R.string.revert_txt));
}
}
public void equelChatId(int id) {
if (id == -1) {
et_content.setText("");
}
if (chatId != id) {
et_content.setText("");
}
chatId = id;
}
@Override
public void show() {
super.show();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
et_content.requestFocus();
et_content.requestFocusFromTouch();
showKeyboard(et_content);
}
}, 100);
}
public ChatEditDialog(@NonNull Context context) {
super(context);
this.mContext = context;
}
Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
// getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setDimAmount(0f);
super.onCreate(savedInstanceState);
setContentView(R.layout.commend_et_content);
ll_all = findViewById(R.id.ll_all);
et_content = findViewById(R.id.et_content);
send = findViewById(R.id.send);
send.setOnClickListener(this);
initSizeView();
addEditLister();
}
private void addEditLister() {
send.setClickable(false);
et_content.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() > 0) {
// send.setBackgroundResource(R.drawable.login_choose_login_shape);
send.setBackgroundResource(R.drawable.game_select_shape);
send.setTextColor(Color.parseColor("#FFFFFF"));
send.setClickable(true);
if (s.length() > 300) {
et_content.setText(s.subSequence(0, 300));
Toaster.show("最多输入300个字");
}
} else {
// send.setBackgroundResource(com.ftoutiao.component.R.drawable.game_bottom_edit_shape);
send.setBackgroundResource(R.drawable.game_unselect_shape);
send.setTextColor(Color.parseColor("#FFFFFF"));
send.setClickable(false);
// send.setTextColor(Color.parseColor("#ACACAC"));
}
}
});
addKeyboardChangeListener();
}
/**
* 显示键盘
*/
public void showKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);
}
/**
* 显示键盘
*/
public void hideKeyboard() {
ScreenUtil.hideInput(activity);
}
private void addKeyboardChangeListener() {
SoftKeyBoardListener.setListener(activity, new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {
@Override
public void keyBoardShow(int height) {
}
@Override
public void keyBoardHide(int height) {
dismiss();
}
});
}
@Override
public void setOnDismissListener(@Nullable OnDismissListener listener) {
super.setOnDismissListener(listener);
}
@Override
public void dismiss() {
ScreenUtil.hideInputMethod(getContext(), et_content);
super.dismiss();
}
/**
* 设置开始显示dialog的内容的位置
*/
private void initSizeView() {
Window window = this.getWindow();
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//注意此处
window.setGravity(Gravity.BOTTOM);
window.getAttributes().windowAnimations = R.style.SlipDialogAnimation;
window.setLayout(-1, -2);//这2行,和上面的一样,注意顺序就行;
}
@Override
public void onClick(View view) {
int i = view.getId();
if (i == R.id.send) {
if (onItemClickRecyclerListener != null) {
if (CheckTextUtil.isFastDoubleClick()) return;
if (CheckTextUtil.getIsTourish()) {
onItemClickRecyclerListener.onItemClick("hitesoft", 100);
return;
}
if (!DataContans.checkLogin()) {
onItemClickRecyclerListener.onItemClick("hitesoft", 13);
return;
}
String contentStr = et_content.getText().toString().trim();
if (TextUtils.isEmpty(contentStr)) {
Toaster.show(activity.getResources().getString(R.string.input_comment_content_text));
return;
}
if (et_content.length() > 500) {
Toaster.show(activity.getResources().getString(R.string.limit_500_text));
return;
}
ScreenUtil.hideInputMethod(getContext(), et_content);
et_content.setText("");
onItemClickRecyclerListener.onItemClick(contentStr, 11);
}
}
}
}