如何让EditText不能自动获取焦点(转)
转载地址:http://blog.csdn.net/subaohao/article/details/9043895
在activity中放置了1个或1个以上的EditText,进入该activity的时候第一个EditText会接收焦点,我希望里面所有的EditText默认是不接收焦点的,该怎么做呢?
方法:
在第一个EditText前面添加一个LinearLayout,并且一定要请求获得焦点,否则无效。网上很多都说到要添加一个LinearLayout,但是没有强调要使用
<requestFocus />这句,发现不使用这句其实是没有效果的。
<LinearLayout android:focusable="true" android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"> <requestFocus /> </LinearLayout>
然后,所有的EditText,里面都不要再使用<requestFocus />。
也有人说,初始化后,调用
EditText的clearFocus(),即:
EditText textIn = (EditText)findViewById(R.id.TextInput); textIn.clearFocus(); textIn.setSelected(false);
试过,但没有效果。
Android 如何让EditText不自动获取焦点
在项目中,一进入一个页面, EditText默认就会自动获取焦点。
那么如何取消这个默认行为呢?
在网上找了好久,有点 监听软键盘事件,有点 调用 clearFouse()方法,但是测试了都没有! xml中也找不到相应的属性可以关闭这个默认行为
解决之道:在EditText的父级控件中找一个,设置成
android:focusable="true" android:focusableInTouchMode="true"
这样,就把EditText默认的行为截断了!
<LinearLayout style="@style/FillWrapWidgetStyle" android:orientation="vertical" android:background="@color/black" android:gravity="center_horizontal" android:focusable="true" android:focusableInTouchMode="true" > <ImageView android:id="@+id/logo" style="@style/WrapContentWidgetStyle" android:background="@drawable/dream_dictionary_logo" /> <RelativeLayout style="@style/FillWrapWidgetStyle" android:background="@drawable/searchbar_bg" android:gravity="center_vertical" > <EditText android:id="@+id/searchEditText" style="@style/WrapContentWidgetStyle" android:background="@null" android:hint="Search" android:layout_marginLeft="40dp" android:singleLine="true" /> </RelativeLayout> </LinearLayout>
原作者的试过的这些方法我还没有经过实践,但是我觉得无论什么方法,本质都应该是:
转移EditText的焦点,将焦点放到别的控件上面。假如EditText位于第一位,那么就应该在它前面定义一个隐藏的控件,让后将焦点放到这个隐藏的控件上面。
以后有时间我会将方法都测试一下,验证我的想法对不对!!
我是刚刚进入公司的Android实习生,菜鸟一枚,博客记录我犯过的错,收获的东西,学到的知识和技术,可能里面会有很多错误的地方,幼稚的地方,欢迎大家指出来,帮助我进步,但请别伤害我,我只是菜鸟一枚,我在努力争取进步。