如何在 SpannableString 中使用 getResources()?

How can I use getResources() in SpannableString?

我正在创建一个小型 Android 应用程序。我想在文本视图中显示可点击的文本。这是我的代码:

public class MainActivity extends AppCompatActivity {

   // SpannableString ss = new SpannableString(getResources().getString(R.string.hello_world));
   SpannableString ss = new SpannableString("Hello world!");

    final ClickableSpan clickableSpan111 = new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            Toast toast = Toast.makeText(getApplicationContext(),
                    ";)",
                    Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ss.setSpan(clickableSpan111, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(TextUtils.concat("my text ", ss));
        textView.setMovementMethod(new LinkMovementMethod());
    }

}

它正常工作,但如果我从

更改代码
SpannableString ss = new SpannableString("Hello world!");

SpannableString ss = new SpannableString(getResources().getString(R.string.hello_world));

应用程序不工作。 如何在 SpannableString 中使用 getResources()?

在 xml 资源文件中,您可以添加不间断的 unicode space 它应该像这样工作 \u00A0 尝试将它添加到你的字符串文件中

根据this

然后你可以添加这个

youspannable.setSpan(clickableSpan, the starting index for nonbreaking space, the last index, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
then
textView.setText(youspannable);
textView.setMovementMethod(LinkMovementMethod.getInstance());

这应该在创建中,因为您在 activity 生命周期中过早地调用了 getResources()。

所以你的代码应该是这样的

    public class MainActivity extends Activity { 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
SpannableString ss = new SpannableString(getResources().getString(R.string.hello_world));

    final ClickableSpan clickableSpan111 = new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            Toast toast = Toast.makeText(getApplicationContext(),
                    ";)",
                    Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        }
    };
        ss.setSpan(clickableSpan111, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(TextUtils.concat("my text ", ss));
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }

}