2016-07-06 2 views
1

Я хочу изменить стиль текста на полужирный, когда пользователь проверяет выделение жирным шрифтом, но я не могу этого сделать. Текст появляется обычно даже после выбора флажка.Сменить текст в стиле программно

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/editText" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentTop="true" 
    android:gravity="top" 
    /> 

<CheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="bold" 
    android:id="@+id/bold" 
    android:layout_alignBottom="@+id/editText" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginBottom="57dp" 
    android:checked="false" /> 

</RelativeLayout> 

MainActivity

public class MainActivity extends AppCompatActivity { 
    CheckBox checkBox; 
    EditText editText; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     editText= (EditText) findViewById(R.id.editText); 
     checkBox=(CheckBox)findViewById(R.id.bold); 
     if(checkBox.isChecked()) 
      editText.setTypeface(editText.getTypeface(), Typeface.BOLD); 

    } 
    ... 
} 

ответ

1

Вам необходимо добавить OnCheckedChangeListener и изменить там шрифт.

Для смелого и наклонный Флажка вы могли бы сделать что-то вроде этого:

CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton button, boolean checked) { 
     Typeface typeface = editText.getTypeface(); 

     switch(button.getId()) { 
      case R.id.bold: 
       if(typeface.isItalic()) { 
        editText.setTypeface(typeface, checked?Typeface.BOLD_ITALIC:Typeface.ITALIC); 
       } else { 
        editText.setTypeface(typeface, checked?Typeface.BOLD:Typeface.NORMAL); 
       } 
       break; 
      case R.id.italic: 
       if(typeface.isBold()) { 
        editText.setTypeface(typeface, checked?Typeface.BOLD_ITALIC:Typeface.BOLD); 
       } else { 
        editText.setTypeface(typeface, checked?Typeface.ITALIC:Typeface.NORMAL); 
       } 
       break; 
     } 
    } 
}; 

bold.setOnCheckedChangeListener(listener); 
italic.setOnCheckedChangeListener(listener); 
+0

Спасибо, что сработали. Если у нас есть флажки multipe, например, для жирного шрифта, один для курсива, тогда нам нужно установить несколько списков? –

+0

либо тот, либо один слушатель, который смотрит на 'button.getId()' и делает разные вещи на его основе. – tachyonflux

+0

вы можете объяснить это дальше с помощью примера, на самом деле я новичок в android. –

0

В андроида, вы можете изменить стиль текста любого XML-виджета, используя следующий атрибут:

android:textStyle="bold" 

Вы также можете использовать:

android:textStyle="italic" 
android:textStyle="bold|italic" 

Для выделения курсивом и полужирным шрифтом и курсивом почтительно.

Вы также можете использовать:

editText.setTypeface(editText.getTypeface(), Typeface.BOLD); 

Это должно быть вызвано из onCreate метода с использованием следующее:

XML: 
android:onClick="makeBold" 

Activity: 
public void makeBold(View V) { 
if(checkBox.isChecked()) 
    editText.setTypeface(editText.getTypeface(), Typeface.BOLD); 
} 

Надеется, что это помогает!

+0

Я хочу изменить стиль Программически –

+0

См. мой обновленный ответ. – 26hmkk

0

Вы имеете, чтобы добавить слушатель флажок, поэтому он определяет, когда состояние флажка изменилось, а затем установите соответствующий шрифт:

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { 
       if(isChecked){ 
      editText.setTypeface(editText.getTypeface(), Typeface.BOLD); 
      } else { 
      editText.setTypeface(editText.getTypeface(), Typeface.NORMAL); 
      } 
     }); 
+0

Спасибо, что он сработал. Если у нас есть несколько флажков, как один для полужирного, один для курсива, тогда нам нужно установить несколько прослушивателей? –

+0

Да, просто установите слушателя для каждого флажка, и вы также можете проверить статус флажка внутри слушателей ... –

+0

Нет другой лучшей альтернативы? –

Смежные вопросы