天天看点

android中ScrollView的setOnClickListener无效

近来意欲开发一款立Flag的APP,有一个部分类似便签,需要一个EditText,而这个EditText外边又套了一个ScrollView(不用ScrollView的话,内容如果超出屏幕,也可以滑动,不过我需要插入图片,如果不用ScrollView的话体验不好,这里不详细赘述),布局如下:

<ScrollView
        android:id="@+id/sv_edit_view"
        android:layout_below="@id/et_edit_title"
        android:layout_above="@id/view_edit_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="18dp"
        android:layout_marginRight="18dp">

        <EditText
            android:background="@null"
            android:id="@+id/et_edit_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top"
            android:textSize="16sp"
            android:textColor="#fff"
            android:hint="请输入内容"/>
    </ScrollView>      

图形如下:

android中ScrollView的setOnClickListener无效

很显然,在没有内容的时候​

​EditText​

​​只有一行那么高,而​

​ScrollView​

​​是​

​match-parent​

​​的,而我自然希望点击​

​ScrollView​

​​的任何一个地方都能让​

​EditText​

​获得焦点,因此我写了如下代码:

scrollView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("YYPT", "click the scrollView");
                content.setFocusable(true);
                content.setFocusableInTouchMode(true);
                content.requestFocus();
                AddFlagActivity.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            }
        });      

本以为这么简单的一件事,随手就写了,然而点了之后什么反应都没有,​

​Logcat​

​里面也没有输出。

scrollView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                //通知父控件请勿拦截本控件touch事件
                view.getParent().requestDisallowInterceptTouchEvent(true);
                switch (motionEvent.getAction()){
                    case MotionEvent.ACTION_UP:
                        Log.d("YYPT", "click the scrollView");
                        //点击整个页面都会让内容框获得焦点,且弹出软键盘
                        content.setFocusable(true);
                        content.setFocusableInTouchMode(true);
                        content.requestFocus();
                        AddFlagActivity.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                        break;
                }
                 return false;
            }
        });