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

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

最近公司做一个直播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);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值