كيف تبقي المساحات في النهاية و/أو في بداية السلسلة؟
-
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();
لكن المسافات في نهاية السلسلة الأولى وفي بداية السلسلة الثانية اختفت (عندما يتم عرض الخبز المحمص) ...
ماذا علي أن أفعل ؟
أعتقد أن الجواب في مكان ما هنا في هذا رابط الوثائق
أم هو شيء مثل الاستخدام & ;
للشخصية "&" ؟؟
المحلول
حتى إذا كنت تستخدم تنسيق السلسلة ، فأنت في بعض الأحيان لا تزال بحاجة إلى مساحات بيضاء في بداية أو نهاية السلسلة الخاصة بك. لهذه الحالات ، لا يهرب مع \
, ، ولا xml:space
تساعد السمة. يجب عليك استخدام كيان HTML  
لمسافة بيضاء.
يستخدم  
للمسافة البيضاء غير القابلة للكسر.
يستخدم  
للمساحة العادية.
نصائح أخرى
واجهتني نفس المشكلة. أردت أن أترك فارغًا في نهاية سلسلة موارد تمثل اسم حقل على الشاشة.
لقد وجدت حلاً في تقرير القضية هذا: 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="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);