Android onfocuschange xml

Android onfocuschange in xml

我有一个 Android 应用程序,在 xml 布局文件中我有这样的东西:

    <CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/checkBoxDone"
    android:checked="false"
    android:clickable="true"
    android:onClick="doneCheckBoxClicked" />

然后在 java 代码中我实现了

    public void doneCheckBoxClicked(View v) { ...}

我可以使用类似的方法来改变焦点的动作吗?在 xml 中有类似

的东西
android:onFocusChanged="editTextFieldFocusChanged"

然后在 java 代码中:

public void editTextFieldFocusChanged(View v, boolean hasFocus) { ...}

或者xml中的onFocusChange没有办法?

XML 中没有 属性,就像 onFocusChanged.You 必须在 java 代码本身中处理焦点更改。

传统上它不用于 xml 声明,您可以将 android:focusable XML 属性添加到视图,在您的布局声明结束时将其设置为真。然后,您必须在 java 代码中处理焦点更改。

没有 android XML 名称空间等同于您描述的 OnFocusChangeListener,但理论上您可以使用反射和 Android 数据绑定库实现类似的东西,虽然我可能会避免这种情况 - 只处理 Java.

中的焦点变化要干净得多

我们无法在 xml 文件中的 edittext 上设置焦点更改侦听器,如 onclicklistener。我们只需要在 Java 文件中完成。

edit_Text.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
    if(hasFocus){
        Toast.makeText(getApplicationContext(), "got the focus", Toast.LENGTH_LONG).show();
    }else {
        Toast.makeText(getApplicationContext(), "lost the focus", Toast.LENGTH_LONG).show();
    }
   }
});

如果您使用 Android 数据绑定来绑定您的处理程序,那么您可以在代码中的任何位置编写自定义 BindingAdapter 以将您的处理程序从 xml 传递到 java:

@BindingAdapter("app:onFocusChange")
public static void onFocusChange(EditText text, final View.OnFocusChangeListener listener) {
    text.setOnFocusChangeListener(listener);
}

然后在 Handler.java 中写一个 getter 那 returns 一个匿名的 class:

public class Handler {
    public View.OnFocusChangeListener getOnFocusChangeListener() {
        return new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean isFocussed) {
                System.out.print("S");
            }
        };
    }
}

现在,在您的 xml 中,您可以像这样传入处理程序:

<layout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable name="handler" type="Handler" />
    </data>
    <EditText app:onFocusChange="@{handler.OnFocusChangeListener}"/>
</layout>