如何在 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());
}
}
我正在创建一个小型 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());
}
}