2017-03-03 6 views
6

Ich habe einen EditText in einem TextInputLayout eingeschlossen. Ich möchte Fehler unter dem EditText anzeigen, aber am rechten Ende des Bildschirms ausgerichtet.TextInputLayout Fehler rechts ausrichten

Dies ist, was ich derzeit haben: Text Input Layout

Der Fehler wie folgt angezeigt: Error right now

Was ich will es so aussehen: What I want

Meine XML ist das:

 <android.support.design.widget.TextInputLayout 
      android:id="@+id/text_input_email" 
      style="@style/forgot_pass_text_inputlayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/tv_enter_email_message" 
      android:layout_marginTop="@dimen/email_padding_top" 
      android:hintTextAppearance="@{forgotPasswordVM.hintTextAppearance}" 
      android:theme="@style/forgot_pass_til_state" 
      app:error="@{forgotPasswordVM.email.textInputError}"> 

      <EditText 
       android:id="@+id/actv_email" 
       style="@style/forgot_pass_edit_text" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/email_address" 
       android:imeActionId="@+id/btn_submit" 
       android:imeOptions="actionSend" 
       android:inputType="textEmailAddress" 
       android:maxLines="1" 
       android:onEditorAction="@{forgotPasswordVM.onEditorAction}" 
       android:singleLine="true" 
       app:binding="@{forgotPasswordVM.email.text}" /> 
     </android.support.design.widget.TextInputLayout> 

Ich bin Datenbindung verwenden.

Ich habe versucht, android:gravity="right" und android:layout_gravity="right" auf die EditText und die TextInputLayout. Keines funktioniert so, wie ich es möchte.

Ich habe versucht, richtige Schwerkraft in das Thema sowie den Stil zu setzen. Keine hat Auswirkungen auf den Fehler.

Ich habe versucht, die richtige Schwerkraft auf den Stil, der innerhalb app:errorTextAppearance="@style/right_error" angewendet wird. Auch das funktioniert nicht.

Ich habe versucht, den Fehler programmatisch zu verschieben, indem Sie einen SpannableStringBuilder mit einem AlignmentSpan nach this link verwenden. Selbst das funktioniert nicht für mich.

Ich bin mir nicht sicher, was ich noch versuchen sollte. Bitte vorschlagen.

+2

Sie könnten versuchen, eine der Optionen in [meine Antwort hier] (http://stackoverflow.com/a/40706872) zu verwenden, um den Fehler 'TextView' zu erhalten und' setGravity (Gravity.RIGHT) 'darauf zu nennen . Ich habe es nicht getestet, aber IIRC, der Fehler 'TextView' hat eine' match_parent' Breite, also sollte es seinen Text so ausrichten wie du es beschreibst. –

Antwort

6

Also dank Mike's answer konnte ich die Lösung herausfinden.

habe ich eine benutzerdefinierte Klasse:

public class CustomTextInputLayout extends TextInputLayout { 

    public CustomTextInputLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public void setErrorEnabled(boolean enabled) { 
     super.setErrorEnabled(enabled); 

     if (!enabled) { 
      return; 
     } 

     try { 
      Field errorViewField = TextInputLayout.class.getDeclaredField("mErrorView"); 
      errorViewField.setAccessible(true); 
      TextView errorView = (TextView) errorViewField.get(this); 
      if (errorView != null) { 
       errorView.setGravity(Gravity.RIGHT); 
       LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
       params.gravity = Gravity.END; 
       errorView.setLayoutParams(params); 
      } 
     } 
     catch (Exception e) { 
      // At least log what went wrong 
      e.printStackTrace(); 
     } 
    } 
} 

Jetzt einfach meine TextInputLayout mit dem CustomTextInputLayout ersetzt ich. Funktioniert wie ein Charme. Vielen Dank Mike. Ich wünschte, ich könnte dir mehr für diese Antwort gutschreiben.

+0

hi, ich versuche, die Fehlermeldung auf dem Editiertext und rechts ausgerichtete Ecke, eine Idee, wie ich das tun? – ViVekH

+0

@ViVekH, können Sie etwas mehr erklären, was Sie wollen? – Rachit

Verwandte Themen