如何在Android中动态更改文本大小

7

我希望实现一个功能,

当用户输入文本时,可以根据设置的字体大小进行更改,

就像Google Docs或Office一样,

enter image description here

现在我找到了一种使用SpannableString的方法,但是阅读了一些示例,似乎无法满足我的需求。

int index = input.getSelectionEnd();
SpannableString  spann = new SpannableString(show_input);
AbsoluteSizeSpan word_size = new AbsoluteSizeSpan(18,true);
spann.setSpan(word_size, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
input.getText().insert(index, spann);

那么,有什么方法可以提供它吗?

1
你的问题不太清楚,请提供你想要的和你已经拥有的。同时添加一些代码。 - karan
很复杂。但是SpannableString适合你。你只需要进行一些头脑风暴。 - activesince93
1
spann.setSpan(word_size, startStringPosition, endStringPosition, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - activesince93
2个回答

7

看起来你想改变所选文本的大小:

int start = editText.getSelectionStart();
int end = editText.getSelectionEnd();
Spannable text=(Spannable)editText.getText();
text.setSpan(new AbsoluteSizeSpan(NEW_TEXT_SIZE, true), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setText(text);

使用AbsoluteSizeSpan更改实际大小,或使用RelativeSizeSpan进行比例大小调整。


0

我试图添加TextWatcher(),

input =(EditText)findViewById(R.id.Input_EditText); 
input.addTextChangedListener(new TextWatcher() 
{
    public void onTextChanged(CharSequence s, int start, int before, int count) {   
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {    
    }
    public void afterTextChanged(Editable s) 
    {
        int index = input.getSelectionEnd();
        String nowstr;

        if(index==0)
        {
            //do nothing
        }
        else
        {
            nowstr = s.toString();
            char nowstr_array[] = nowstr.toCharArray();
            show_input = String.valueOf(nowstr_array[index-1]);

            SpannableStringBuilder  spann = new SpannableStringBuilder(show_input);
            AbsoluteSizeSpan word_size = new AbsoluteSizeSpan(40,true);
            spann.setSpan(word_size, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            input.getText().insert(index, spann);
        }
    }
});

但是这个程序会崩溃...

然后,我尝试着做

        Toast.makeText(MainActivity.this, spann, Toast.LENGTH_SHORT).show();
        //input.getText().insert(index, spann);

但这样做可以显示...

那是为什么?


它在哪一行崩溃了?添加崩溃日志。 - lewkka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接