android观看直播编辑消息EditText失去焦点的问题解决方案

来源:互联网 发布:根域名 编辑:程序博客网 时间:2024/05/22 17:31

本人第一次写博客,写作不怎么好,而且不是大牛。为了记录遇到的问题和解决的方法,供自己遇到有个好的解决方案。

最近公司做一个直播APP,使用了第三方ucloud和环信,鉴于别的比较热门的直播应用。在直播和观看直播,点击EditText弹出软键盘之后,EditText无故消失。
于是排查问题,定位了到UVideoView和EditText抢焦点。然后各种上网找资料,弄了好久没弄好。
于是使用了PopWindow帮我解决了问题。

这里写代码片布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical">    <LinearLayout        android:id="@+id/recyclerView"        android:layout_width="0dp"        android:layout_height="0dp"        android:background="@color/transparent"        android:orientation="vertical"        android:layout_above="@+id/container_send" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"        android:background="@color/half_white_transparent"        android:padding="8dp">        <RelativeLayout            android:id="@+id/switch_rl"            android:layout_width="70dp"            android:layout_height="38dp"            android:background="@drawable/select_barrage">            <TextView                android:id="@+id/switch_tv"                android:layout_width="wrap_content"                android:layout_height="38dp"                android:background="@drawable/route_white_bg_4"                android:gravity="center"                android:paddingLeft="5dp"                android:paddingRight="15dp"                android:text="弹幕"                android:textColor="@color/pink2red"                android:textSize="12sp" />        </RelativeLayout>        <LinearLayout            android:layout_width="0dp"            android:layout_height="38dp"            android:layout_marginLeft="5dp"            android:layout_marginRight="5dp"            android:layout_weight="1"            android:background="@drawable/route_white_bg_4"            android:gravity="center">            <EditText                android:id="@+id/input_barrage_et"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:layout_weight="1"                android:background="@color/transparent"                android:hint="@string/hint_talk_with_fans"                android:inputType="text"                android:maxLength="20"                android:paddingLeft="10dp"                android:paddingRight="10dp"                android:textColor="@color/text_black_color"                android:textColorHint="@color/text_black_hint_color"                android:textSize="@dimen/xsmall_txt" />        </LinearLayout>        <TextView            android:id="@+id/send_tv"            android:layout_width="wrap_content"            android:layout_height="38dp"            android:background="@drawable/route_red_bg_4"            android:gravity="center"            android:paddingLeft="10dp"            android:paddingRight="10dp"            android:text="发送"            android:textColor="@color/white2gray"            android:textSize="@dimen/xsmall_txt" />    </LinearLayout></LinearLayout>/** * 自定义PopWindow * Created by macbook  */public class InputPopWindow extends PopupWindow implements View.OnClickListener{    /**     * 上下文     */    private Context mContext;    /**     * 弹幕开关     */    private TextView switchTv;    /**     * 弹幕布局     */    private RelativeLayout switchRl;    /**     * 内容编辑框     */    private EditText inputEt;    /**     * 发送     */    private TextView sendTv;    private boolean isBarrageShow = false;    private MessageViewListener messageViewListener;    public void setMessageViewListener(MessageViewListener messageViewListener) {        this.messageViewListener = messageViewListener;    }    public InputPopWindow(Context context){        this.mContext = context;        initView();    }    private void initView(){       View v = LayoutInflater.from(mContext).inflate(R.layout.fragment_chat_input, null);        switchTv = (TextView) v.findViewById(R.id.switch_tv);        switchTv.setOnClickListener(this);        switchRl = (RelativeLayout) v.findViewById(R.id.switch_rl);        switchRl.setOnClickListener(this);        inputEt = (EditText) v.findViewById(R.id.input_barrage_et);        sendTv = (TextView) v.findViewById(R.id.send_tv);        sendTv.setOnClickListener(this);        this.setContentView(v);        ColorDrawable dw = new ColorDrawable(0xb0000000);        setBackgroundDrawable(dw);        setFocusable(true);        setOutsideTouchable(true);        this.setWidth(Utils.getScreenWidth());        this.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);    }     public void showPopupWindow(View parent) {        if (this.isShowing()) {            this.dismiss();            return;        }        showInputMethodManager();        this.showAtLocation(parent, Gravity.BOTTOM, 0, 0);    }    private void showInputMethodManager(){        inputEt.setFocusable(true);        inputEt.setFocusableInTouchMode(true);        inputEt.requestFocus();        Timer timer = new Timer();        timer.schedule(new TimerTask() {            public void run(){                InputMethodManager inputManager = (InputMethodManager) inputEt.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);                inputManager.showSoftInput(inputEt, 0);            }        },200);    }    @Override    public void dismiss() {        KeyboardUtils.hideSoftInput(inputEt);        super.dismiss();        inputEt.setText("");        if(messageViewListener != null){            messageViewListener.onHiderBottomBar();        }    }    public interface MessageViewListener {        void onMessageSend(String content,boolean isBarrage);        void onHiderBottomBar();    }}调用方法    private InputPopWindow inputPopWindow;    public void showInputPopWindow(Context context, View view,InputPopWindow.MessageViewListener messageViewListener){        if(inputPopWindow == null){            inputPopWindow = new InputPopWindow(context);        }        inputPopWindow.setMessageViewListener(messageViewListener);        inputPopWindow.showPopupWindow(view);    }

原创粉丝点击