在做项目时,我们可能会遇到当输入框的内容变化后让光标自动显示在下一个输入框,这样就省去了手工的点击,从而提高了效率。
requestFocus() 获取焦点 即光标的显示
setOnFocusChangeListener 监听EditText焦点变化 当获取焦点后 hasFocus 为true
具体演示的代码:
xml布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="40dp" android:hint="请输入姓名:" /> <EditText android:id="@+id/et_pass" android:layout_width="match_parent" android:layout_height="40dp" android:hint="请输入密码:" /> <Button android:id="@+id/btn_request" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="密码框获取焦点" /> <Button android:id="@+id/btn_lose" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="密码框失去焦点" /> </LinearLayout>
java代码:
package com.example.android_edittext; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText mEtName,mEtPass; private Button btnRequest,btnLose; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initEvents(); } private void initEvents() { btnRequest.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mEtName.setText("zm"); mEtPass.requestFocus(); } }); btnLose.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mEtPass.setText("LP"); mEtName.requestFocus(); } }); mEtPass.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus){//获取焦点 Toast.makeText(MainActivity.this, "密码框获取到焦点了", Toast.LENGTH_SHORT).show(); }else{//失去焦点 Toast.makeText(MainActivity.this, "密码框失去焦点了", Toast.LENGTH_SHORT).show(); } } }); } private void initView() { mEtName=(EditText) findViewById(R.id.et_name); mEtPass=(EditText) findViewById(R.id.et_pass); btnRequest=(Button) findViewById(R.id.btn_request); btnLose=(Button) findViewById(R.id.btn_lose); } }