如何在 Android 中使用小空格作为数字分隔符?
How do I get tiny spaces as separator of numbers in Android?
为了让用户更容易知道确切的分数,我想用小空格分隔我的三个数字块(Unicode:SIX-PER-EM SPACE)。
我想要 1∼241∼234 而不是 1241234。
我试过了
DecimalFormat formatter = new DecimalFormat("# ### ### ### ###");
String score = formatter.format(getHighscore());
不幸的是,该代码给我一个错误。如何将我的 6 个 em 空间放入我的数字中?
错误:
FATAL EXCEPTION: main
Process: com.pairs.pairs, PID: 4296
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pairs.pairs/com.pairs.phoneme.TestingActivity}: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2547)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5695)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
Caused by: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: Error inflating class fragment
at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:406)
at android.app.Activity.setContentView(Activity.java:2190)
at com.pairs.phoneme.TestingActivity.portraitLayout(TestingActivity.java:125)
at com.pairs.phoneme.TestingActivity.onCreate(TestingActivity.java:76)
at android.app.Activity.performCreate(Activity.java:6270)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2500)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5695)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:406)
at android.app.Activity.setContentView(Activity.java:2190)
at com.pairs.phoneme.TestingActivity.portraitLayout(TestingActivity.java:125)
at com.pairs.phoneme.TestingActivity.onCreate(TestingActivity.java:76)
at android.app.Activity.performCreate(Activity.java:6270)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2500)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5695)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
Caused by: java.lang.IllegalArgumentException: # ### ### ### ###
at java.text.DecimalFormat.initNative(DecimalFormat.java:564)
at java.text.DecimalFormat.<init>(DecimalFormat.java:557)
at java.text.DecimalFormat.<init>(DecimalFormat.java:535)
at com.pairs.phoneme.Score.getHighScoreString(Score.java:103)
at com.pairs.phoneme.fragments.ScoreAndTimeFragment.updateTopbarViews(ScoreAndTimeFragment.java:44)
at com.pairs.phoneme.fragments.ScoreAndTimeFragment.onCreateView(ScoreAndTimeFragment.java:59)
at android.app.Fragment.performCreateView(Fragment.java:2236)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:954)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1131)
at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1233)
at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2228)
at android.app.FragmentController.onCreateView(FragmentController.java:98)
at android.app.Activity.onCreateView(Activity.java:5579)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:754)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:406)
at android.app.Activity.setContentView(Activity.java:2190)
at com.pairs.phoneme.TestingActivity.portraitLayout(TestingActivity.java:125)
at com.pairs.phoneme.TestingActivity.onCreate(TestingActivity.java:76)
at android.app.Activity.performCreate(Activity.java:6270)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2500)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5695)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
像这样尝试它应该工作
DecimalFormat formatter = new DecimalFormat("#,###,###,###,###");
String score = formatter.format(getHighscore()).replaceAll(",", " ");
您收到异常:
Caused by: java.lang.IllegalArgumentException: # ### ### ### ### at
java.text.DecimalFormat.initNative(DecimalFormat.java:564)
我认为不能将空格传递给此构造函数。
我有一个不同的代码可以满足您的需要:
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator('\u2008');
formatter.setDecimalFormatSymbols(symbols);
Log.e("Formatted: ", formatter.format(1241234));
为了让用户更容易知道确切的分数,我想用小空格分隔我的三个数字块(Unicode:SIX-PER-EM SPACE)。
我想要 1∼241∼234 而不是 1241234。
我试过了
DecimalFormat formatter = new DecimalFormat("# ### ### ### ###");
String score = formatter.format(getHighscore());
不幸的是,该代码给我一个错误。如何将我的 6 个 em 空间放入我的数字中?
错误:
FATAL EXCEPTION: main
Process: com.pairs.pairs, PID: 4296
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pairs.pairs/com.pairs.phoneme.TestingActivity}: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2547)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5695)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
Caused by: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: Error inflating class fragment
at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:406)
at android.app.Activity.setContentView(Activity.java:2190)
at com.pairs.phoneme.TestingActivity.portraitLayout(TestingActivity.java:125)
at com.pairs.phoneme.TestingActivity.onCreate(TestingActivity.java:76)
at android.app.Activity.performCreate(Activity.java:6270)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2500)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5695)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:406)
at android.app.Activity.setContentView(Activity.java:2190)
at com.pairs.phoneme.TestingActivity.portraitLayout(TestingActivity.java:125)
at com.pairs.phoneme.TestingActivity.onCreate(TestingActivity.java:76)
at android.app.Activity.performCreate(Activity.java:6270)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2500)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5695)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
Caused by: java.lang.IllegalArgumentException: # ### ### ### ###
at java.text.DecimalFormat.initNative(DecimalFormat.java:564)
at java.text.DecimalFormat.<init>(DecimalFormat.java:557)
at java.text.DecimalFormat.<init>(DecimalFormat.java:535)
at com.pairs.phoneme.Score.getHighScoreString(Score.java:103)
at com.pairs.phoneme.fragments.ScoreAndTimeFragment.updateTopbarViews(ScoreAndTimeFragment.java:44)
at com.pairs.phoneme.fragments.ScoreAndTimeFragment.onCreateView(ScoreAndTimeFragment.java:59)
at android.app.Fragment.performCreateView(Fragment.java:2236)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:954)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1131)
at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1233)
at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2228)
at android.app.FragmentController.onCreateView(FragmentController.java:98)
at android.app.Activity.onCreateView(Activity.java:5579)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:754)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:406)
at android.app.Activity.setContentView(Activity.java:2190)
at com.pairs.phoneme.TestingActivity.portraitLayout(TestingActivity.java:125)
at com.pairs.phoneme.TestingActivity.onCreate(TestingActivity.java:76)
at android.app.Activity.performCreate(Activity.java:6270)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2500)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2613)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1469)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5695)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
像这样尝试它应该工作
DecimalFormat formatter = new DecimalFormat("#,###,###,###,###");
String score = formatter.format(getHighscore()).replaceAll(",", " ");
您收到异常:
Caused by: java.lang.IllegalArgumentException: # ### ### ### ### at java.text.DecimalFormat.initNative(DecimalFormat.java:564)
我认为不能将空格传递给此构造函数。
我有一个不同的代码可以满足您的需要:
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator('\u2008');
formatter.setDecimalFormatSymbols(symbols);
Log.e("Formatted: ", formatter.format(1241234));