以编程方式更改文字样式

时间:2016-07-06 22:33:32

标签: android android-studio

我想在用户选中粗体复选框时将文本样式更改为粗体,但我无法执行此操作。选中复选框后,文本也会正常显示。

<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);

    }
    ...
}

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

在android中,您可以使用以下属性更改任何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);
}

希望这有帮助!

答案 2 :(得分: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);
            }
        });