android开发怎么让edittext无法获取焦点

android开发怎么让edittext无法获取焦点,第1张

在android项目中,一进入一个页面, EditText默认就会自动获取焦点。使用如下的方法可以让EditText无法获取焦点。

解决之道:在EditText的父级控件中设置下面的属性

Android:focusable="true"  

   android:focusableInTouchMode="true"

在window7平台,android studio开发工具下,步骤如下。

1、打开android sutdio并创建一个项目,如下图:

2、打开界面的布局文件,在布局文件中增加一个Edittext的空间,并在EditText的父控件中设置如下属性,即可让EditText无法获取焦点,如下图:

public MyTextWatcher(EditText editText){

mEditText = editText;

mEditTextsetFocusable(true);

}

试试看

我设置的gridview的item是textview和edittext两部分组成,

然后一开始在gridadapter(override baseadapter)中设定的:

edittextsetfocusable(true);

edittextrequestfocus();

而要求改成点击item edittext就可以获取焦点,之前我在activity里面onitemclick直接没有写,现在要写的话,需要改动以下几个地方:

在gridviewitem的xml文件里,对edittext的设置

android:focusable="false"android:focusableInTouchMode="false"

然后再gridview的activity里面,给griditem添加上监听事件:

gridViewsetOnItemClickListener(new OnItemClickListener() { @Override

public void onItemClick(AdapterView parent, View view,

int position, long id)

{ EditText edittext = (EditText) viewfindViewById(Ridgrid_edittext);

edittextsetFocusable(true); edittextsetFocusableInTouchMode(true);

if (edittextrequestFocus())

{

InputMethodManager imm = (InputMethodManager) getSystemService(ContextINPUT_METHOD_SERVICE); immshowSoftInput(edittext, InputMethodManagerSHOW_IMPLICIT); }

} });

在我们的应用中,有时候一进入一个页面,EditText默认就会自动获取焦点。d出输入法框,用户体验很不好,那么如何取消这个默认行为呢?ps:这篇文字是一年前写的,现在有网友再问这个问题,我进行重新编辑--20140507,目前有更好的法,第一种方法局限性很强,大家可以使用第二种方法第一种方法:在网上找了好久,有点监听软键盘事件的方法,有调用clearFouse()方法,但是测试了都不行!在对应的xml中也找不到相应的属性可以关闭这个默认行为。后来研究了一下,在其父控件下,添加如下的属性,就可以完美解决:android:focusable="true"android:focusableInTouchMode="true"举例如下:第二种方法:直接关闭输入法12345678privatevoidcloseInputMethod(){InputMethodManagerimm=(InputMethodManager)getSystemService(ContextINPUT_METHOD_SERVICE);booleanisOpen=immisActive();if(isOpen){//immtoggleSoftInput(0,InputMethodManagerHIDE_NOT_ALWAYS);//没有显示则显示immhideSoftInputFromWindow(mobile_topup_numgetWindowToken(),InputMethodManagerHIDE_NOT_ALWAYS);}}调用这个方法体就行了,具体if语句里面的几个参数,我就借用一个网友的日志来写把(在此感谢)12345678910111213141516171819201、方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示)InputMethodManagerimm=(InputMethodManager)getSystemService(ContextINPUT_METHOD_SERVICE);immtoggleSoftInput(0,InputMethodManagerHIDE_NOT_ALWAYS);2、方法二(view为接受软键盘输入的视图,SHOW_FORCED表示强制显示)InputMethodManagerimm=(InputMethodManager)getSystemService(ContextINPUT_METHOD_SERVICE);immshowSoftInput(view,InputMethodManagerSHOW_FORCED);[java]viewplaincopyimmhideSoftInputFromWindow(viewgetWindowToken(),0);//强制隐藏键盘3、调用隐藏系统默认的输入法((InputMethodManager)getSystemService(ContextINPUT_METHOD_SERVICE))hideSoftInputFromWindow(WidgetSearchActivitythisgetCurrentFocus()getWindowToken(),InputMethodManagerHIDE_NOT_ALWAYS);(WidgetSearchActivity是当前的Activity)4、获取输入法打开的状态InputMethodManagerimm=(InputMethodManager)getSystemService(ContextINPUT_METHOD_SERVICE);booleanisOpen=immisActive();//isOpen若返回true,则表示输入法打开好了,祝大家玩的开心

可以通过下面的代码来实现Android自动d出软键盘:

edittextrequestFocus(); //edittext是一个EditText控件

Timer timer = new Timer(); //设置定时器

timerschedule(new TimerTask() {

@Override

public void run() { //d出软键盘的代码

InputMethodManager imm = (InputMethodManager)getSystemService(ContextINPUT_METHOD_SERVICE);

immshowSoftInput(edittext, InputMethodManagerRESULT_SHOWN);

immtoggleSoftInput(InputMethodManagerSHOW_FORCED,InputMethodManagerHIDE_IMPLICIT_ONLY);

}

}, 300); //设置300毫秒的时长

说明:同样是在写Techo Lite时遇到的问题。希望程序可以自动d出软键盘,可是尝试了各种办法都没有效果。问题的原因似乎是必须等待UI绘制完成后d出软键盘的代码才会有效。于是就采用了上面的方法。需要注意的是,在此之前必须让edittext获取焦点,不然也是无效的。

当editText获取焦点的时候,需要直接调用显示键盘命令:

editTextsetOnFocusChangeListener(new ViewOnFocusChangeListener() {

@Override

public void onFocusChange(View v, boolean hasFocus) {

if (hasFocus) {

dialoggetWindow()setSoftInputMode(WindowManagerLayoutParamsSOFT_INPUT_STATE_ALWAYS_VISIBLE);

}

}

});

一、activity

1一个activity就是一个类,继承activity;

2需要复写onCreate()方法;

3每一个activity都需要在AndroidMainfestxml清单上进行配置;

4为activity添加必要的控件。

二、布局

线性布局:LinearLayout

1填满父空间:fill_parent、match_parent

2文本多大空间就有多大:warp_content

3文字对齐方式:gravity

4占屏幕的比例:layout_weight="1"  水平方向,则width=0,垂直方向,则height=0

5一行显示,空间不够会省略:singleLine="ture"  false会换行

6背景:background="#ffffff"

7水平布局:orientation="horizontal"

垂直布局:orientation="vertivcal"

表格布局:TableLayout

1内边距:padding

2外边距:marginLeft\Start、Right\End、Top、Bottom

三、RelativeLayout相对布局

layout_above 将该控件的底部置于给定ID控件之上

layout_below 将该控件的顶部置于给定ID控件之下

layout_toLeftOf 将该控件的右边缘和给定ID控件的左边缘对齐

layout_toRightOf 将该控件的左边缘和给定ID控件的右边缘对齐

layout_alignBaseline 该控件的baseline和给定ID的控件的Baseline对齐

layout_alignBottom 该控件的底部边缘和给定ID的控件的底部边缘对齐

layout_alignLeft 该控件的左边缘和给定ID的控件的左边缘对齐

layout_alignRight 该控件的右边缘和给定ID的控件的右边缘对齐

layout_alignTop 该控件的顶部边缘和给定ID的控件的顶部边缘对齐

layout_alignparentBottom 如果该值为true,则该控件的底部和父控件的底部对齐layout_alignParentLeft 如果该值为true,则该控件的左边和父控件的左边对齐

layout_alignParentRight 如果该值为true,则该控件的右边和父控件的右边对齐

layout_alignParentTop 如果该值为true,则该控件的上边和父控件的上边对齐

layout_centerHorizontal 如果该值为true,则该控件将被置于水平方向的中央

layout_centerInParent 如果该值为true,则该控件将被置于父控件水平和垂直方向的中央

layout_centerVertival 如果该值为true,则该控件将被置于垂直方向的中央

四、一个Intent对象包含一组信息

1Component name

2Action

3Data

4Category

5Extras

6Flags

Intent intent = new Intent(this, SecondActivityclass);

startActivity(intent);  //startActivity方法

intentputExtra("Key", "Value");  //键值对

intent = getIntent();

String value = intentgetStringExtra("Key");    //通过键提取数据

五、初级控件:EditText、TextView、Button

1获取EditText的值

String value = EditTextgetText()toString();

2将值放到Intent对象中

Intent intent = new Intent();

intentputExtra("one",value )

intentsetCalss(Activitythis, OtherActivityclass);

3使用这个Intent对象来启动Otheractivity

ActivitythisstartActivity(intent);

4将监听器的对象绑定到按钮对象上

buttonsetOnclickListener(new Listener());

5得到Intent对象当中的值

Intent intent = getIntent();

String value1 = intentgetStringExtra("one");

int value2 = IntegerparseInt(value);

六、其他初级控件使用

①ImageView

②RadioGroup和RadioButton

setOnCheckedChangeListener(new RadioGroupOnCheckedChangeListener())

③Checkbox

setOnCheckedChangeListener(new CompoundButtonOnCheckedChangeListener())

④Menu

1当客户点击MENU按钮的时候,调用onCreateOptionMenu()方法

public boolean onCreateOptionMenu(Menu menu){

menuadd(0,1,1,Rstringid);

}

2当客户点击MENU内部的具体某一个选项时,调用onOptionItemSelected()方法

public boolean onOptionItemSelected(MenuItem item){

if(itemgetItemId() == 1){

finish();

}

return superonOptionItemSelected(item);

}

七、Activity的生命周期

1第一次创建时调

protected void onCreat(Bundle saveInstanceState);

2显示出来时调用

protected void onStrat();

3获得用户焦点时调用(可 *** 作)

protected void onResume();

4点击d出第二个Activity时调用

protected void onPause();

5当第一个Activity不可见时调用

protected void onStop();

6当返回第一个Activity时调用,代替OnCreate,因为没被销毁

protected void onRestart();

7当返回第一个Activity时调用(先执行onStop,在执行,因为第二个Activity被销毁,不能返回获取,只能通过onCreat,onStart,onResume再创建)

protected void onDestory();

八、Task

1Task是存放Activity的Stack栈。当点击启动第二个Activiry时,第一个Activtiy会被压入Stack栈当中,第二个Activity会位于栈的顶部;当返回第一个Activtiy时,第二个Activity会被d出Stack,第一个Activity会位于栈的顶部,以此类推。

注释:当调用finish()时,当前的Activity会被Destory掉,栈中的Activity会消失。

2当Activity都从Stack退出后,则就不存在Task。

九、高级控件

①进度条ProgressBar

水平进度条style="android:attr/progressBarStyleHorizontal"

圆圈进度条style="android:attr/progressBarStyle"

用户可视的visibility="gone"

②列表ListView

十、其他控件

A下拉菜单Spinner

1创建一个ArrayAdapter:

ArrayAdapter<CharSequence> adapter = ArrayAdaptercreateFromResource(

this, //指上下文对象

Rarrayplant_array, //引用了在文件中定义的String数组

androidRlayoutsimple_spinner_item);//用来指定Spinner的样式,可替换自定义

adaptersetDropDownViewResource(

androidRlayoutsimple_spinner_dropdown_item);//设置Spinner当中每个条目的样式

2得到Spinner对象,并设置数据:

spinner=(spinner)findViewById(RidspinnerId);

spinnersetAdapter(adapter);

spinnersetPrompt("测试");//标题

3创建监听器

class SpinnerOnSelectListener implements OnItemSelectedListener{

@override

public void onItemSelected(

AdapterView<> adapterView,//整个列表对象

View view,//被选中的具体条目对象

int position,//位置

long id){ //id

String selected = adapterViewgetItemAtPosition(position)toString();

}

@override

public void onNothingSelected(AdapterView<> adapterView){

Sop("nothingSelected");

}

}

4绑定监听器

spinnersetOnItemSelectedListener(new SpinnerOnSelectListener());

注:第二种动态设计

1创建ArrayList对象

List<String> list = new ArrayList<String>();

listadd("test1");

2 调用方法

ArrayAdapter adapter = new ArrayAdapter(

this, //指上下文对象

Rlayoutitem, //引用了指定了下拉菜单的自定义布局文件

RidtextViewId,//id

list);//数据

3得到Spinner对象,并设置对象

spinnersetAdapter(adapter);

spinnersetPrompt("测试");//标题

3创建监听器

class SpinnerOnSelectListener implements OnItemSelectedListener{

@override

public void onItemSelected(

AdapterView<> adapterView,//整个列表对象

View view,//被选中的具体条目对象

int position,//位置

long id){ //id

String selected = adapterViewgetItemAtPosition(position)toString();

}

@override

public void onNothingSelected(AdapterView<> adapterView){

Sop("nothingSelected");

}

}

4绑定监听器

spinnersetOnItemSelectedListener(new SpinnerOnSelectListener());

BDatePicker和DatePickerDialog

1声明一个监听器,使用匿名内部类

DatePickerDialogOnDateSetListener onDateSetListener

= new DatePivkerDialogOnDateSetListener(){

public void onDateSet(

DatePicker view,

int year,

int monthOfYear,

int dayOfMonth){

Sop(year+"-"+motnOfYear+"-"+dayOfMonth)

}

}

2复写onCreateDialog(int id)方法:

@override

protected Dialog onCreateDialog(int id){

switch(id){

case DATE_PICKER_ID:

return new DatePickerDialog(this,onDateSetListener,2019,11,25);

}

return null;

}

3使用时调用showDialog()方法

showDialog(DATE_PICKER_ID);

CAutoCompleteTextView

BWidget

CAnimatin

十一、实现ContentProvider过程

1定义一个CONTENT_URI常量

2定义一个类,继承ContentProvider

3实现query、insert、update、delete、getType和onCreate方法

4在AndroidManifestxml当中进行声明

以上就是关于android开发怎么让edittext无法获取焦点全部的内容,包括:android开发怎么让edittext无法获取焦点、android EditText中自动获取焦点没有成功 ,请帮忙看下原因!、android gridview 怎么在适配器中设置不可选择项等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9498005.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存