2016-11-05 22 views
0

我有我的Android應用程序中的EditText驗證。錯誤消息按預期彈出,但不顯示默認錯誤圖標。默認錯誤圖標不顯示EditText setError

enter image description here

​​

我也試圖與自定義圖標,它不工作過。

users.setError("Field can not be empty",getDrawable(R.drawable.ic_error_outline_black_24dp)); 

如何獲得驗證的默認錯誤圖標

佈局文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.dinesh.note.MainActivity"> 

<TableLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true"> 

    <TableRow 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <TextView 
      android:id="@+id/textView7" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 

      android:labelFor="@+id/users" 
      android:text="@string/users" 
android:textAppearance="@android:style/TextAppearance.Widget.TextView" /> 

     <EditText 
      android:id="@+id/users" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:inputType="number" 
      /> 
    </TableRow> 

    <TableRow 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <TextView 
      android:id="@+id/textView4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:labelFor="@+id/years" 
      android:text="@string/years" 


android:textAppearance="@android:style/TextAppearance.Widget.TextView" /> 

     <EditText 
      android:id="@+id/years" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 


      android:ems="10" 
      android:inputType="number" /> 
    </TableRow> 

    <TableRow 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <TextView 
      android:id="@+id/textView5" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:labelFor="@+id/percentage" 
      android:text="@string/percentage" 
      android:textAppearance="@android:style/TextAppearance.Widget.TextView" /> 

     <EditText 
      android:id="@+id/percentage" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 

      android:ems="10" 
      android:inputType="numberDecimal" /> 
    </TableRow> 

    <TableRow 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <TextView 
      android:id="@+id/textView6" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:labelFor="@+id/months" 
      android:text="@string/months" 
      android:textAppearance="@android:style/TextAppearance.Widget.TextView" /> 

     <EditText 
      android:id="@+id/months" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 

      android:ems="10" 
      android:inputType="number" /> 
    </TableRow> 
</TableLayout> 

<TextView 
    android:id="@+id/tamount" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_below="@+id/calculate" 
    android:layout_marginTop="24dp" 
    android:text="@string/tamount" 
    android:textAppearance="@style/TextAppearance.AppCompat.Title" /> 

<TextView 
    android:id="@+id/amount" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_below="@+id/tamount" 
    android:layout_marginTop="24dp" 
    android:text="@string/amount" 
    android:textAlignment="center" 
    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large" 
    android:textSize="36sp" 
    android:textColor="@color/colorAccent" /> 

<Button 
    android:id="@+id/calculate" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/colorPrimary" 
    android:text="@string/calculate" 
    android:textColor="@android:color/background_light" 
    android:layout_marginTop="227dp" 
    android:onClick="calculateBtn" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" /> 
</RelativeLayout> 

風格XML

<resources> 
<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

</resources> 
+1

你能發佈你的佈局文件嗎? –

+0

添加了我的佈局文件 – Dinesh

回答

1

我會認真建議你考慮現代的方法來這種事情的原因之一是:更多的用戶升級他們的設備,從谷歌向後兼容庫已經可以做到這一點。

例如,嘗試:TextInputLayout可通過支持庫獲得。如果您還沒有添加,請在您的app-level build.gradle文件中執行此操作。

compile 'com.android.support:design:25.0.0' 

然後在您的佈局文件:

<android.support.design.widget.TextInputLayout 
    android:id="@+id/quoteIdWrapper" 
    android:layout_gravity="start" 
    android:layout_width="match_parent" 
    android:gravity="start" 
    android:layout_height="wrap_content"> 

    <EditText 
     android:id="@+id/quoteId" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="18sp" 
     android:lines="8" 
     android:layout_gravity="start" 
     android:gravity="top|start" 
     android:minLines="5" 
     android:maxLines="10" 
     android:scrollbars="vertical" 
     android:inputType="textCapSentences|textMultiLine" 
     android:hint="@string/quote_text"/> 

</android.support.design.widget.TextInputLayout> 

從你的代碼,你就可以得到這兩個項目(TextInputLayout & EditText)引用。

接着,驗證EDITTEXT字段,如果某物是無效的,設置以下屬性到TextInputLayout參考:

textInputLayout.setErrorEnabled(true); 
textInputLayout.setError("Your error message"); 

這將自動與正確的彩色信號(紅色常常)給用戶使其更容易知道有什麼是一個小姐。

我希望你明白我的意思。祝你好運!!

+1

謝謝你的方法..它的工作.. :) – Dinesh

1

有兩種ways-

方法1

您可以通過重寫setError()方法來創建你自己的類的EditText和使用setCompoundDrawables()方法來顯示錯誤圖標。

public class CustomErrorEditText extends EditText { 

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

    @Override 
    public void setError(CharSequence error, Drawable icon) { 
     setCompoundDrawables(null, null, icon, null); 
    } 
} 

方法2

您需要setError使用前設置的繪製邊界。

Drawable drawable = getDrawable(R.drawable.ic_error_outline_black_24dp); 
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 
users.setError("error", drawable); 
+0

有沒有辦法獲得默認錯誤圖標? – Dinesh

+0

'setError(String)'會給你默認圖標 –