我在表单上有12个EditText字段和几个按钮。在第一个EditText上,用户必须输入区号和下一个电话号码。我希望能够停止用户,并在数字位数不正确时将焦点设置回EditText。 我在区号上有OnFocusChangeListner,但焦点仍然在用户触摸的EditText上。
cArea.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
if (cArea.getText().toString().length() < 3) {
cArea.requestFocus();
}
}
else getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
});
我尝试将此广告添加到活动中:
public class EnterInfo extends Activity implements View.OnTouchListener, View.OnFocusChangeListener
View myView = findViewById(R.id.mainlayout);
myView.setOnFocusChangeListener(EnterInfo.this);
mainlayout是包含所有其他布局的顶部布局。 以下是明确重点。但它永远不会被召唤。
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
if(v.getId()!= cArea.getId()){
EditText MyEdit= (EditText) findViewById(((EditText) v).getId());
MyEdit.clearFocus();
}
}
}
如果我可以让它工作就可以检查焦点是什么(EditText,Button等等)所以我不会将MyEdit作为EditText强制转换为Button。
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp">
<EditText
android:layout_width="55dp"
android:layout_height="wrap_content"
android:inputType="phone|textNoSuggestions"
android:id="@+id/cArea"
style="@style/BlackSText"
android:gravity="start"
android:hint="@string/area"
android:maxLength="3"
android:layout_gravity="center_vertical" />
<EditText
android:id="@+id/cPhone"
style="@style/BlackSText"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|top"
android:layout_marginStart="20dp"
android:inputType="textNoSuggestions|number"
android:maxLength="7"
android:minWidth="120dp"
android:gravity="start"
android:hint="@string/phone" />
<EditText
android:id="@+id/cLName"
style="@style/BlackSText"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:inputType="textNoSuggestions|textCapWords|textPersonName"
android:minWidth="400dp"
android:gravity="start"
android:maxLength="30"
android:hint="@string/lname" />
<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions|textCapWords|textPersonName"
android:id="@+id/cFName"
android:gravity="start"
style="@style/BlackSText"
android:hint="@string/fname"
android:layout_gravity="center_vertical" />
<EditText
android:id="@+id/cEmail"
style="@style/BlackSText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions|textEmailAddress"
android:minWidth="300dp"
android:gravity="start"
android:hint="@string/email"
android:layout_weight="1"
android:layout_gravity="center_vertical" />
<Button
android:id="@+id/clearBtn"
style="@style/BlackText"
android:layout_width="113dp"
android:layout_height="42dp"
android:background="@drawable/orangebtn"
android:text="@string/clear"
android:textSize="26sp"
android:layout_gravity="center_vertical|bottom|top" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp">
<EditText
android:id="@+id/cStreet"
style="@style/BlackSText"
android:layout_width="450dp"
android:layout_height="wrap_content"
android:gravity="start"
android:hint="@string/street"
android:inputType="textNoSuggestions|textCapWords|textPostalAddress"
android:maxLength="30"
android:layout_gravity="center_vertical" />
<EditText
android:id="@+id/cCity"
style="@style/BlackSText"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:ems="10"
android:gravity="start"
android:inputType="textNoSuggestions|textCapWords"
android:hint="@string/city"
android:maxLength="20"
android:layout_gravity="center_vertical" />
<EditText
android:id="@+id/cState"
style="@style/BlackSText"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:gravity="start"
android:inputType="textCapCharacters|textNoSuggestions"
android:maxLength="2"
android:layout_gravity="center_vertical" />
<EditText
android:id="@+id/cZip"
style="@style/BlackSText"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:ems="10"
android:gravity="start"
android:inputType="textNoSuggestions|number"
android:hint="@string/zip"
android:maxLength="5"
android:layout_gravity="center_vertical" />
<EditText
style="@style/BlackSText"
android:id="@+id/apartmentEd"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:ems="10"
android:gravity="start"
android:inputType="textNoSuggestions"
android:hint="@string/apartment"
android:maxLength="10"
android:layout_gravity="center_vertical" />
<EditText
style="@style/BlackSText"
android:id="@+id/buildingEd"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:gravity="start"
android:inputType="textNoSuggestions"
android:hint="@string/building"
android:maxLength="5"
android:layout_gravity="center_vertical" />
<EditText
android:layout_width="120dp"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions|number"
android:id="@+id/cMobile"
style="@style/BlackSText"
android:gravity="start"
android:maxLength="10"
android:enabled="true"
android:hint="@string/mobile"
android:focusable="true"
android:layout_gravity="center_vertical" />
</LinearLayout>
感谢您的帮助。
答案 0 :(得分:0)
请尝试以下代码:
cArea.setOnFocusChangeListener(EnterInfo.this);
phnNumber.setOnFocusChangeListener(EnterInfo.this);
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
if(v.getId()== cArea.getId()){
cArea.clearFocus();
}
}
}