查找具有焦点

时间:2015-09-23 05:46:53

标签: android android-edittext onfocus

我在表单上有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>

感谢您的帮助。

1 个答案:

答案 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();
        }
    }
}