SORU
7 Mart 2011, PAZARTESİ


Popup giriş hataları görüntülemek için?

Görüntü aşağıda gösterildiği gibi bir açılır pencere 3 ** tüm alanları doğrulama hatası olduğunu göstermek istiyorum:

Error alert in popup

Android bildiğim kadarıyla var drawables:

1) popup_inline_error.9.png

popup_inline_error.9.png

2) popup_inline_error_above.9.png

popup_inline_error_above.9

3) indicator_input_error.png

indicator_input_error.png

Kullanarak EditText sağ tarafı içinde kırmızı hata göstergesi görüntülemek mümkün duyuyorum:

Drawable err_indiactor = getResources().getDrawable(R.drawable.indicator_input_error);
mEdiText.setCompoundDrawablesWithIntrinsicBounds(null, null, err_indiactor, null);

Ayrıca, Özel bir Ekmek olması gerektiğini düşünüyorum ama bu konuda herhangi bir fikrim almıyorum gibi görünüyor ilk resim ama görüldüğü gibi hata mesajı görüntülemek istiyorum şimdi.

CEVAP
8 Mart 2011, Salı


Önceki cevabı benim sorun için bir çözüm gibi ama farklı bir yaklaşım özel Drawable bir resim kullanmak yerine indicator_input_error varsayılan görüntü için çalıştık.

Varsayılan Drawable

Default Drawable

Özel Drawable

Custom Drawable

Yani, sadece düzeni xml dosyamda 7 ** iki oluşturdum ve EditText Java kod Listener bazı uygulanır.

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:padding="20dip"
    android:background="#222222">
    <EditText android:layout_width="match_parent"
        android:layout_height="wrap_content" android:hint="Username"
        android:id="@ id/etUsername" android:singleLine="true"
        android:imeActionLabel="Next"></EditText>
    <EditText android:layout_width="match_parent"
        android:inputType="textPassword"
        android:layout_height="wrap_content" android:hint="Password"
        android:id="@ id/etPassword" android:singleLine="true"
        android:imeActionLabel="Next"></EditText>
</LinearLayout>

EditTextValidator.java

import java.util.regex.Pattern;

import android.app.Activity;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

public class EditTextValidator extends Activity {

    private EditText mUsername, mPassword;

    private Drawable error_indicator;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Setting custom drawable instead of red error indicator,
        error_indicator = getResources().getDrawable(R.drawable.emo_im_yelling);

        int left = 0;
        int top = 0;

        int right = error_indicator.getIntrinsicHeight();
        int bottom = error_indicator.getIntrinsicWidth();

        error_indicator.setBounds(new Rect(left, top, right, bottom));

        mUsername = (EditText) findViewById(R.id.etUsername);
        mPassword = (EditText) findViewById(R.id.etPassword);

        // Called when user type in EditText
        mUsername.addTextChangedListener(new InputValidator(mUsername));
        mPassword.addTextChangedListener(new InputValidator(mPassword));

        // Called when an action is performed on the EditText
        mUsername.setOnEditorActionListener(new EmptyTextListener(mUsername));
        mPassword.setOnEditorActionListener(new EmptyTextListener(mPassword));
    }

    private class InputValidator implements TextWatcher {
        private EditText et;

        private InputValidator(EditText editText) {
            this.et = editText;
        }

        @Override
        public void afterTextChanged(Editable s) {

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            if (s.length() != 0) {
                switch (et.getId()) {
                case R.id.etUsername: {
                    if (!Pattern.matches("^[a-z]{1,16}$", s)) {
                        et.setError("Oops! Username must have only a-z");
                    }
                }
                    break;

                case R.id.etPassword: {
                    if (!Pattern.matches("^[a-zA-Z]{1,16}$", s)) {
                        et.setError("Oops! Password must have only a-z and A-Z");
                    }
                }
                    break;
                }
            }
        }
    }

    private class EmptyTextListener implements OnEditorActionListener {
        private EditText et;

        public EmptyTextListener(EditText editText) {
            this.et = editText;
        }

        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

            if (actionId == EditorInfo.IME_ACTION_NEXT) {
                // Called when user press Next button on the soft keyboard

                if (et.getText().toString().equals(""))
                    et.setError("Oops! empty.", error_indicator);
            }
            return false;
        }
    }
}

Şimdi böyle bir test var:

Doğrulamaları için EditText boş :

Sanırım kullanıcı tıklayın Username alan sonra Softkeybord açar ve eğer kullanıcı press Next anahtar kullanıcı olacak odaklı, Password alan ve Username alan boş kalır o zaman hata olur gösterildiği gibi verilen görüntüleri aşağıda:

Empty text Empty text

Yanlış giriş doğrulamaları için

1) ben metin yazın vikaS Kullanıcı adı alanında, sonra da hata görüntüsü aşağıdaki gibi olacak :

Wrong username

2) Ben metin yazın Password1 parola alanında, sonra da hata görüntüsü aşağıdaki gibi olacak :

wrong password

Not:

Burada kullanıcı anahtar kartı üzerinde EditText alanı boş ve Next tuşuna sola ama her durumda kullanabilirsiniz durumunda sadece özel drawable kullandım. Sadece setError() yöntem Drawable nesne sağlamanız gerekiyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Sergio Lafuente Rubio

    Sergio Lafue

    11 Aralık 2008
  • The Onion

    The Onion

    14 Mart 2006
  • FusioNGamiing

    FusioNGamiin

    10 Temmuz 2007