1
我已經創建了用於創建密碼佈局的庫項目。我創建了四個用於輸入密碼的文本框,每個文本框只能包含一個字符。但我無法創建返回密碼的事件。當用戶輸入4位密碼時,我想發起一個事件。如何爲自定義控件創建事件
這裏是XML佈局:
<?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:orientation="vertical" >
<LinearLayout
android:id="@+id/ll_passcodedigits"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >
<EditText
android:id="@+id/et_passcode"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="center"
android:inputType="textPassword"
android:maxLength="1" />
<EditText
android:id="@+id/et_passcode2"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="center"
android:inputType="textPassword"
android:maxLength="1" />
<EditText
android:id="@+id/et_passcode3"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="center"
android:inputType="textPassword"
android:maxLength="1" />
<EditText
android:id="@+id/et_passcode4"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="center"
android:inputType="textPassword"
android:maxLength="1" />
</LinearLayout>
</LinearLayout>
,這裏是類的代碼:
public class Passcode extends LinearLayout {
EditText firstEditText, secondEditText, thirdEditText, fourEditText;
public Passcode(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public Passcode(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.passcode_layout, this);
loadViews();
}
private void loadViews() {
firstEditText = (EditText) findViewById(R.id.et_passcode);
secondEditText = (EditText) findViewById(R.id.et_passcode2);
thirdEditText = (EditText) findViewById(R.id.et_passcode3);
fourEditText = (EditText) findViewById(R.id.et_passcode4);
// Text changed event for first EditText
firstEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
if (s.length() == 1) {
firstEditText.setFocusable(false);
secondEditText.requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
// Text changed event for second EditText
secondEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
if (s.length() == 1) {
secondEditText.setFocusable(false);
thirdEditText.requestFocus();
} else if (s.length() == 0) {
firstEditText.setFocusable(true);
firstEditText.requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
// Text changed event for third EditText
thirdEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
if (s.length() == 1) {
thirdEditText.setFocusable(false);
fourEditText.requestFocus();
} else if (s.length() == 0) {
secondEditText.setFocusable(true);
secondEditText.requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
// Text changed event for fourth EditText
fourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
if (s.length() == 1) {
thirdEditText.setFocusable(false);
} else if (s.length() == 0) {
thirdEditText.setFocusable(true);
thirdEditText.requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
}
}
謝謝。它工作正常 –