2016-06-13 7 views
4

Ich habe einen Android-App, und in der XML-Layout-Datei Ich habe so etwas wie dies:Android onfocuschange in 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" /> 

Dann in dem Java-Code I

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

Kann ich ähnliche verwenden Ansatz für Fokus ändern Aktionen. Haben Sie in der XML so etwas wie

android:onFocusChanged="editTextFieldFocusChanged" 

und dann in Java-Code:

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

Oder gibt es keine Möglichkeit onFocusChange im xml zu tun?

Antwort

2

Wir können nicht Fokus ändern Listener von Editext in XML-Datei wie onclick Listener festlegen. Wir müssen es nur in Java-Dateien machen.

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(); 
    } 
    } 
}); 
+0

Danke! Schade, obwohl. Es wäre sehr praktisch :) – Jeni

+0

@Jeni Vielen Dank für die Annahme der Antwort –

0

Es gibt keine Eigenschaft in XML wie onFocusChanged. Sie müssen die Fokusänderung im Java-Code selbst behandeln.

0

Traditionell wird es nicht in der XML-Deklaration verwendet. Sie können das XML-Attribut android:focusable der Ansicht hinzufügen. Setzen Sie es in Ihrer Layoutdeklaration auf true. Dann müssen Sie die Fokusänderung in Ihrem Java-Code behandeln.

0

Es gibt keine android XML-Namespace für eine OnFocusChangeListener wie Sie beschreiben, aber theoretisch könnten Sie etwas ähnliches mit Reflection und der Android Data Binding Library implementieren, obwohl ich wahrscheinlich vermeiden würde - Es ist viel sauberer, nur den Fokus zu behandeln Änderung in Java.

4

Wenn Sie Android-Daten verwenden Bindung Ihre Handler binden, dann könnten Sie eine benutzerdefinierte BindingAdapter überall in Ihrem Code schreiben Sie Ihre Handler von xml java weitergeben müssen:

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

Und in Handler.java schreiben einen Getter, die eine anonyme Klasse zurückgibt:

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

Jetzt in Ihrem xml Sie in der Prozedur wie dies passieren kann:

<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>