【已解决】Android中Activity中某个EditText被clearFocus后其他控件(别的EditText)也不要获得焦点

【问题】

当然Activity中,当某个EditText被clearFocus后,结果focus又跑到当前页面中第一个可以获得焦点的控件:别的EditText

此处希望别的没有任何控件去获得焦点。

【折腾过程】

1.搜:

android edittext clearFocus got focus again

参考:

使用TextView/EditText应该注意的地方 – xiaoguozi’s Blog – C++博客

待会可以去试试:

requestFocus

2.搜:

android clearFocus get focus again

参考:

android – How to remove focus without setting focus to another control? – Stack Overflow

其是间接实现:

当取消了一个EditText的focus后,不要让焦点跑到其他控件(尤其是另外的,或者是界面中第一个EditText)

则可以:

对于EditText的parent级别的,一般都是LinearLayout,对他们设置:

    android:focusable="true" 
    android:focusableInTouchMode="true" 

这样,当取消了子控件EditText的focus后,focus就自动跑到上一级的view了,即此处的LinearLayout了。

所以去试试:

            LinearLayout singleTabAllGroup = new LinearLayout(mTabContext);
            singleTabAllGroup.setLayoutParams(
              new LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));
            singleTabAllGroup.setOrientation(LinearLayout.VERTICAL);
            //singleTabAllGroup.setOrientation(LinearLayout.HORIZONTAL);
            singleTabAllGroup.setPadding(4, 4, 4, 4);
            singleTabAllGroup.setBackgroundColor(getResources().getColor(R.color.TabPageBackgroudColor));

变为:

            LinearLayout singleTabAllGroup = new LinearLayout(mTabContext);
            singleTabAllGroup.setLayoutParams(
              new LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));
            singleTabAllGroup.setOrientation(LinearLayout.VERTICAL);
            //singleTabAllGroup.setOrientation(LinearLayout.HORIZONTAL);
            singleTabAllGroup.setPadding(4, 4, 4, 4);
            singleTabAllGroup.setBackgroundColor(getResources().getColor(R.color.TabPageBackgroudColor));
            //for got lost focus from child EditText
            singleTabAllGroup.setFocusable(true);
            singleTabAllGroup.setFocusableInTouchMode(true);

看看效果:

然后基本实现了所需要的效果:

当子的EditText失去焦点后,父级的LinearLayout好像是获得了焦点。

3.不过,对于其他级别的view,也去添加了对应的代码:

<?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="match_parent"
    android:baselineAligned="false"
    android:orientation="vertical"
    android:focusable="true" 
    android:focusableInTouchMode="true" >

    ......

</LinearLayout>

和:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
	android:paddingLeft="20sp"
    android:orientation="horizontal"
	android:focusable="true" 
    android:focusableInTouchMode="true"
    >

......

</RelativeLayout>

 

【总结】

想要一个EditText失去焦点后,其他控件(尤其是别的可以编辑的EditText)不要获得焦点,则可以:

对于该EditText的父级控件(一般都是LinearLayout),设置对应的focusable和focusableInTouchMode为true:

xml中写法为:

	android:focusable="true" 
	android:focusableInTouchMode="true"

代码中为:

edittextView.setFocusableInTouchMode(true);

这样,当子级的EditText失去焦点后,父级的LinearLayout就可以获得焦点

->别的(可编辑的EditText)控件就不会获得焦点了。



发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量