كيف تبقي المساحات في النهاية و/أو في بداية السلسلة؟

StackOverflow https://stackoverflow.com/questions/1587056

  •  22-09-2019
  •  | 
  •  

سؤال

لا بد لي من تسلسل هاتين السلاسل من ملفات الموارد/القيمة الخاصة بي:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>

أفعل ذلك بهذه الطريقة:

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+total_flips+getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

لكن المسافات في نهاية السلسلة الأولى وفي بداية السلسلة الثانية اختفت (عندما يتم عرض الخبز المحمص) ...

ماذا علي أن أفعل ؟

أعتقد أن الجواب في مكان ما هنا في هذا رابط الوثائق

أم هو شيء مثل الاستخدام &amp ; للشخصية "&" ؟؟

هل كانت مفيدة؟

المحلول

حتى إذا كنت تستخدم تنسيق السلسلة ، فأنت في بعض الأحيان لا تزال بحاجة إلى مساحات بيضاء في بداية أو نهاية السلسلة الخاصة بك. لهذه الحالات ، لا يهرب مع \, ، ولا xml:space تساعد السمة. يجب عليك استخدام كيان HTML &#160; لمسافة بيضاء.

يستخدم &#160; للمسافة البيضاء غير القابلة للكسر.
يستخدم &#032; للمساحة العادية.

نصائح أخرى

واجهتني نفس المشكلة. أردت أن أترك فارغًا في نهاية سلسلة موارد تمثل اسم حقل على الشاشة.

لقد وجدت حلاً في تقرير القضية هذا: https://github.com/ibotpeaches/apktool/issues/124

هذه هي نفس الفكرة التي يقترحها دوسي. إدراج \u0020 مباشرة في XML للحصول على فارغ ترغب في الحفاظ عليه.

مثال :

<string name="your_id">Score :\u0020</string>

يتم الاستبدال في وقت البناء ، وبالتالي لن يؤثر على أداء لعبتك.

هذه توثيق يقترح الاقتباس سيعمل:

<string name="my_str_spaces">" Before and after? "</string>

أنا فقط استخدم رمز UTF للمساحة " u0020" في ملف STRINGS.xml.

<string name="some_string">\u0020The name of my string.\u0020\u0020</string>

يعمل بشكل رائع. (أندرويد يحب رموز UTF)

قد يكون هذا السؤال قديمًا ، ولكن حتى الآن أسهل طريقة للقيام بذلك هي إضافة علامات اقتباس. علي سبيل المثال:

<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>

من الممكن أن يكون الفضاء بعرض مختلف:

<string name="space_demo">|&#x20;|&#x2009;|&#x200A;||</string>

| الفضاء | مساحة رقيقة | مساحة الشعر | لا مساحة |

التصور:

enter image description here

إذا كنت تريد حقًا أن تفعل ذلك بالطريقة التي كنت تفعلها ، فأعتقد أنه عليك أن تخبرها أن المساحة البيضاء ذات صلة بالهروب منها:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>

ومع ذلك ، سأستخدم تنسيق السلسلة لهذا. شيء مثل ما يلي:

<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>

من ثم

String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);

استخدم "" مع قيمة مورد السلسلة.

مثال: "القيمة مع المساحات"

أو

استخدم رمز u0020 للمساحات.

أعمل بشكل جيد أنا أستخدم u0020

<string name="hi"> Hi \u0020 </string>
<string name="ten"> \u0020 out of 10  </string>
<string name="youHaveScored">\u0020 you have Scored \u0020</string>

ملف جافا

String finalScore = getString(R.string.hi) +name+ getString(R.string.youHaveScored)+score+ getString(R.string.ten);
               Toast.makeText(getApplicationContext(),finalScore,Toast.LENGTH_LONG).show();

لقطة شاشة هنا صورة لإظهار عمل هذا الرمز

كل الإجابات هنا لم تنجح بالنسبة لي. بدلاً من ذلك ، لإضافة مساحة في نهاية سلسلة في XML انا فعلت هذا

<string name="more_store">more store<b> </b> </string>

يمكن تقديم حجة لإضافة المساحة برمجيا. نظرًا لأن هذه الحالات ستستخدم في كثير من الأحيان في التسلسل ، فقد قررت إيقاف الجنون وأن أفعل فقط + " " +. هذه ستكون منطقية في عظم اللغات الأوروبية ، كنت أجمع.

ليس لدي أي فكرة عن Android على وجه الخصوص ، ولكن هذا يبدو وكأنه معالجة مساحة XML البيضاء المعتادة - تُعتبر المساحة البيضاء المتخلف والمتزايدة داخل عنصر غير مهمة وإزالتها بشكل عام. محاولة xml:space:

<string name="Toast_Memory_GameWon_part1" xml:space="preserve">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2" xml:space="preserve"> flips !</string>

قد لا يجيب هذا في الواقع على السؤال (كيفية الحفاظ على مساحات بيضاء في XML) ولكنه قد يحل المشكلة الأساسية بأمان.

بدلاً من الاعتماد فقط على موارد XML ، يتسلل باستخدام سلاسل التنسيق. لذا قم أولاً بإزالة المساحات البيضاء

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>

ثم قم ببناء خيطك بشكل مختلف:

String message_all_pairs_found = 
      String.format(Locale.getDefault(), 
                    "%s %d %s", 
                    getString(R.string.Toast_Memory_GameWon_part1),
                    total_flips,
                    getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

هناك أيضًا حل لاستخدام CDATA. مثال:

<string name="test"><![CDATA[Hello          world]]></string>

لكن بشكل عام أعتقد \u0020 هو جيد بما فيه الكفاية.

إذا كنت بحاجة إلى المساحة لغرض تسلسلها لاحقًا مع سلاسل أخرى ، فيمكنك استخدام نهج تنسيق السلسلة لإضافة وسيط إلى تعريف السلسلة الخاص بك:

<string name="error_">Error: %s</string>

ثم تنسيق السلسلة على النحو التالي:

String message = context.getString(R.string.error_, "Something went wrong")

لا يعمل مع XML: Space = "Preserve"

لذلك فعلت ذلك أسرع طريقة =>

لقد أضفت ببساطة A + "" + حيث كنت بحاجة إليها ...

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top