3

У меня есть текст редактирования внутри textinputlayout. Я пытаюсь установить обязательный символ поля (звездочка красного цвета) в edittext. Я установил подсказку для текста редактирования. Мой код выглядит следующим образом.Имея обязательный символ для текста редактирования (звездочка красного цвета), который находится внутри textinputlayout

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginLeft="16dp" 
     android:layout_marginTop="16dp" 
     android:orientation="horizontal"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 

      android:text=" * " 
      android:layout_gravity="center_vertical" 

      android:textColor="#ff0000" 
      android:textSize="15sp" /> 
     <android.support.design.widget.TextInputLayout 

      android:id="@+id/tilEngNo" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      > 

       <EditText 
       android:id="@+id/engineno" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:layout_marginLeft="15dp" 
      android:layout_marginRight="16dp" 
       android:hint="Engine No" /> 
     </android.support.design.widget.TextInputLayout> 
    </LinearLayout> 

Это дает мне символ звездочки вне textinputlayout. Поэтому, когда я начинаю вводить текст редактирования, подсказка всплывает, но не символ звездочки. Мое требование - заставить символ звездочки вести себя так же, как подсказка edittext. Каков наилучший подход? Любая помощь приветствуется. Заранее спасибо

ответ

0

Вы можете сделать это, используя небольшой трюк, то есть вам нужно изменить layout_gravity, когда OnFocusChangeListener вызывается в Java-коде. Пример:

//Set OnFocusChangeListener for EditText 
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View view, boolean hasFocus) { 
       //astriskText is Object of your textview contains * as text 
       if (hasFocus) { 
        //if edittext has focus then move it to top 
        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) astriskText.getLayoutParams(); 
        lp.gravity= Gravity.TOP; 
        astriskText.setLayoutParams(lp); 
       } else if(edittext.getText().toString().length()==0){ 
        //else check if edittext is empty then move it back to center 
        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) astriskText.getLayoutParams(); 
        lp.gravity= Gravity.CENTER_VERTICAL; 
        astriskText.setLayoutParams(lp); 
       } 
      } 
     }); 
2

Предположим, что у вас есть EditTexts для обязательных значений. Вы хотите, чтобы подсказка была красной звездочкой, а текст - светло-серым.

После EditTexts у вас есть объяснение: TextView с красной звездочкой и текстом «= поле обязательно»

В моем случае я использовал это так:

showEditTextsAsMandatory (joinEmailET, joinNameET, passwordET, confirmPasswordET); 
showTextViewsAsMandatory ((TextView) findViewById (R.id.requiredText)); 

public void showEditTextsAsMandatory (EditText... ets) 
{ 
    for (EditText et : ets) 
    { 
     String hint = et.getHint().toString(); 

     et.setHint (Html.fromHtml ("<font color=\"#ff0000\">" + "* " + "</font>" + hint)); 
    } 
} 

public void showTextViewsAsMandatory (TextView... tvs) 
{ 
    for (TextView tv : tvs) 
    { 
     String text = tv.getText().toString(); 

     tv.setText (Html.fromHtml ("<font color=\"#ff0000\">" + "* " + "</font>" + text)); 
    } 
} 
0

Попробуйте присоединиться к вашему TextInputLayout подсказку с Составной постфикс, завернутый в HTML:

public void setRequired(boolean required) { 

    componentField.setHint(
    TextUtils.concat(
     componentField.getHint(), 
     Html.fromHtml(
     getContext().getString(
      R.string.required_asterisk)))); 
} 

Звездочка код должен быть сохранен в андроид strings.xml для правильного экранирования:

<string name = "required_asterisk"><![CDATA[<font color=\'#cc0029\'>&nbsp*</font>]]></string>