【问题标题】:How to dynamically change the text size in Android如何在Android中动态更改文本大小
【发布时间】:2016-01-30 14:44:59
【问题描述】:

我想实现一个功能,

EditText用户在输入文字时,可以按照设置的字体大小进行修改,

如 Google Docs of Office,

现在我找到了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);

那么有没有办法提供呢?

【问题讨论】:

  • 您的问题无法理解,请提供您想要的和您拥有的。还要添加一些代码
  • 它很复杂。但是 SpannableString 会为你工作。你只需要做一些头脑风暴。
  • spann.setSpan(word_size, startStringPosition, endStringPosition, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

标签: java android spannablestring


【解决方案1】:

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

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 更改比例大小。

【讨论】:

    【解决方案2】:

    我想添加 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);
    

    但是这样做可以显示...

    这就是为什么?

    【讨论】:

    • 哪一行崩溃了?添加崩溃日志。
    猜你喜欢
    • 2011-09-13
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2019-02-19
    • 2014-06-04
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多