অ্যান্ড্রয়েডে স্ট্রিং.এক্সএমএল থেকে কীভাবে মান পড়বেন?


368

আমি লাইনটি লিখেছি:

String Mess = R.string.mess_1 ;

স্ট্রিংয়ের মান পেতে, তবে স্ট্রিং ফেরার পরিবর্তে এটি আমাকে পূর্ণসংখ্যার আইডি দিচ্ছে। আমি কীভাবে এর স্ট্রিংয়ের মান পেতে পারি? আমি string.xmlফাইলটিতে স্ট্রিংয়ের মান উল্লেখ করেছি ।

উত্তর:


807

এটা চেষ্টা কর

String mess = getResources().getString(R.string.mess_1);

হালনাগাদ

String string = getString(R.string.hello);

আপনি হয় ব্যবহার করতে পারেন getString(int)বা getText(int)একটি স্ট্রিং পুনরুদ্ধার করতে।getText(int)স্ট্রিংয়ের জন্য প্রয়োগ করা কোনও সমৃদ্ধ পাঠ্য স্টাইলিং ধরে রাখবে।

তথ্যসূত্র: https://developer.android.com/guide/topics/resources/string-resource.html


87
আপনি this.getString(R.string.some_id)ইতিমধ্যে কোনও Context(ক্রিয়াকলাপ বা পরিষেবা) এ থাকলে আপনি এটি সরল করতে পারেন ।
ম্যাথিয়াস

আমি এটি ব্যবহার করেছি: স্ট্রিং মেসেজ + = getResferences ()। GetString (R.string.string1) + "আরও কিছু শব্দ ..."; এবং আমি এসএমএসের মাধ্যমে এই স্ট্রিংটি প্রেরণ করতে চেয়েছিলাম, তবে এটি কাজ করছে না। স্ট্রিং রিসোর্স ছাড়াই এটি কাজ করে। আমি কিছু অনুপস্থিত করছি?
কিবিবি

9
আপনি আরও স্ট্রিং (R.string.some_id) এ এটি আরও সরল করতে পারেন। এবং যদি আপনি স্ট্রিংটি কাস্টমাইজ করতে চান তবে আপনি স্ট্রিংটিকে "স্বাগতম,% 1 $ s" এর মতো কিছু তৈরি করতে পারেন, তবে আপনি getString (R.string.some_id, "জন দো") ব্যবহার করতে পারেন। রানটাইমে "ওয়েলকাম, জন দো" পেতে to
এম গ্রানজা

আমি যেমন ব্যবহার করেছি যেমন অন্যান্য ধরণের জন্যও কাজ করেgetResouces().getInteger(R.integer.my_value_in_xml)
নোহ হেরন

61

ক্রিয়াকলাপে:

this.getString(R.string.resource_name)

যদি কার্যকলাপে না থাকে তবে প্রসঙ্গে অ্যাক্সেস থাকে:

context.getString(R.string.resource_name)
application.getString(R.string.resource_name)

3
thisক্রিয়াকলাপের সময় আপনাকে অন্তর্ভুক্ত করতে হবে না। কেবল getString()আপনাকে জিনিস করতে দেয়।
কপসঅনরোড

43

আমি এটি ব্যবহার করছি:

String URL = Resources.getSystem().getString(R.string.mess_1);

10
সতর্কতা - এই উত্তর অনুসারে অ্যান্ড্রয়েডের ডকুমেন্টেশন উদ্ধৃত করে ব্যবহার করা Resources.getSystem()আপনাকে অ্যাপ্লিকেশন সংস্থান দেয় না, তবে কেবল অ্যান্ড্রয়েডের। এটি যেমন সংস্থান হিসাবে ব্যবহার করা উচিত নয় string। আমি এই সমাধানটি ব্যবহার করেছি এবং অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে গেছে, notfoundexceptionএমন একটি নিক্ষেপ করছিলাম যা বোঝা শক্ত ছিল (যেহেতু রিসোর্সটিতে রয়েছে strings.xml)।
এট_ল

এটি চেষ্টা করেও - কাজ করে না। সত্য
হতেও

23

যাইহোক, স্ট্রিংস এক্সএক্সএমএলে স্ট্রিং অ্যারেগুলি তৈরি করাও এটি সম্ভব:

<string-array name="tabs_names"> 
    <item>My Tab 1</item> 
    <item>My Tab 2</item>
</string-array>

এবং তারপরে আপনার ক্রিয়াকলাপ থেকে আপনি এর মতো রেফারেন্স পেতে পারেন:

String[] tab_names = getResources().getStringArray(R.array.tab_names);
String tabname1=tab_names[0];//"My Tab 1"

এই উত্তরটি সেখানেই থাকা উচিত the বেশিরভাগ সময়, আপনি এক্সএমএল থেকে অ্যারেগুলি পড়ছেন একক স্ট্রিং নয়।
ওজনোগওয়া জুড ওচালিফু

11

কেবল ভবিষ্যতের রেফারেন্সের জন্য।

ইন স্ট্রিং রিসোর্স ডকুমেন্টেশন এটা বলেছেন:

স্ট্রিং পুনরুদ্ধার করতে আপনি হয় getString (int) বা getText (int) ব্যবহার করতে পারেন। getText (int)> স্ট্রিংটিতে প্রয়োগ করা কোনও সমৃদ্ধ পাঠ্য স্টাইলিং ধরে রাখবে।


6

সমাধান ঘ

Context context;
String mess = context.getString(R.string.mess_1)

সমাধান 2

String mess = getString(R.string.mess_1)

3

খণ্ডগুলিতে, আপনি ব্যবহার করতে পারেন

getActivity().getString(R.id.whatever);

3

উদাহরণস্বরূপ আপনি যদি কোনও বোতামে স্ট্রিংয়ের মান যুক্ত করতে চান তবে সাধারণ ব্যবহার

android:text="@string/NameOfTheString"

স্ট্রিং.এক্সএমএল- এ সংজ্ঞায়িত পাঠ্যটি দেখতে এমন দেখাচ্ছে:

 <string name="NameOfTheString">Test string</string>

2

getResources()অ্যান্ড্রয়েডে ব্যবহারের আগে আপনাকে অবশ্যই প্রসঙ্গের নামটি উল্লেখ করতে হবে ।

String user=getApplicationContext().getResources().getString(R.string.muser);

অথবা

Context mcontext=getApplicationContext();

String user=mcontext.getResources().getString(R.string.muser);

1

আপনি এই কোডটি ব্যবহার করতে পারেন:

 getText (R.string.mess_1); 

মূলত, আপনাকে গেটটেক্সট () পদ্ধতিতে প্যারামিটার হিসাবে রিসোর্স আইডি পাস করতে হবে।


1

আপনি যদি কোনও কার্যকলাপে থাকেন তবে আপনি ব্যবহার করতে পারেন

getResources().getString(R.string.whatever_string_youWant);

আপনি যদি কোনও কার্যকলাপে না থাকেন তবে এটি ব্যবহার করুন:

getApplicationContext.getResource().getString(R.String.Whatever_String_you_want)

1

বিস্তারিত

  • অ্যান্ড্রয়েড স্টুডিও ৩.১.৪
  • কোটলিন সংস্করণ: 1.2.60

কার্য

  • একক লাইন ব্যবহার
  • সর্বনিম্ন কোড
  • সংকলক থেকে পরামর্শ ব্যবহার করুন

পদক্ষেপ 1. অ্যাপ্লিকেশন ()

আপনার অ্যাপ্লিকেশন প্রসঙ্গে লিঙ্ক পান

class MY_APPLICATION_NAME: Application() {

    companion object {
        private lateinit var instance: MY_APPLICATION_NAME

        fun getAppContext(): Context = instance.applicationContext
    }

    override fun onCreate() {
        instance = this
        super.onCreate()
    }

}

পদক্ষেপ 2. ইনট এক্সটেনশন যুক্ত করুন

inline fun Int.toLocalizedString(): String = MY_APPLICATION_NAME.getAppContext().resources.getString(this)

ব্যবহার

strings.xml

<resources>
    <!-- .......  -->
    <string name="no_internet_connection">No internet connection</string>
    <!-- .......  -->
</resources>

স্ট্রিংয়ের মান পান:

val errorMessage = R.string.no_internet_connection.toLocalizedString()

ফলাফল

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন


1

তোমার দর্শন লগ করা লিখতে যখন R। আপনি গ্রহণের R.javaমাধ্যমে তৈরি ক্লাসটির কথা উল্লেখ করছেন, আপনি যে পদ্ধতি থেকে পদ্ধতির অভ্যন্তরে পড়ার চেষ্টা করছেন সেটি ব্যবহার getResources().getString()এবং পাস করুন ।idgetString()

উদাহরণ: String[] yourStringArray = getResources().getStringArray(R.array.Your_array);



0

হালনাগাদ

  • আপনি getString(R.string.some_string_id)উভয় Activityবা ব্যবহার করতে পারেন Fragment
  • Context.getString(R.string.some_string_id)যেখানে আপনার কাছে getString()পদ্ধতির সরাসরি অ্যাক্সেস নেই সেখানে আপনি ব্যবহার করতে পারেন । লাইক Dialog

সমস্যাটি এমন যেখানে আপনার Contextঅ্যাক্সেস নেই , যেমন কোনও পদ্ধতির মতোUtil ক্লাসে ।

প্রসঙ্গ ছাড়াই নীচের পদ্ধতিটি ধরে নিন।

public void someMethod(){
    ...
    // can't use getResource() or getString() without Context.
}

এখন আপনি Contextএই পদ্ধতিতে প্যারামিটার হিসাবে পাস এবং ব্যবহার করবেনgetString().

public void someMethod(Context context){
    ...
    context.getString(R.string.some_id);
}

আমি কি করি

public void someMethod(){
    ...
    App.getRes().getString(R.string.some_id)
}

কি? আপনার অ্যাপের যে কোনও জায়গায় ব্যবহার করা খুব সহজ!

সুতরাং এখানে একটি বোনাস অনন্য সমাধান রয়েছে যার মাধ্যমে আপনি যে কোনও জায়গা থেকে সংস্থানগুলি অ্যাক্সেস করতে পারেন Util class

import android.app.Application;
import android.content.res.Resources;

public class App extends Application {
    private static App mInstance;
    private static Resources res;


    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
        res = getResources();
    }

    public static App getInstance() {
        return mInstance;
    }

    public static Resources getResourses() {
        return res;
    }

}

আপনার manifest.xml <applicationট্যাগে নাম ক্ষেত্র যুক্ত করুন ।

<application
        android:name=".App"
        ...
        >
        ...
    </application>

এখন আপনি যেতে ভাল।



0

String myString = getResources().getString(R.string.here_your_string_name);

এখন আপনার স্ট্রিংটি মাই স্ট্রিংয়ে অনুলিপি করা হয়েছে। আমি আশা করি এটি আপনার পক্ষে কাজ করবে।


0

আপনি স্ট্রিং.এক্সএমএলে সংজ্ঞায়িত মানটি সরাসরি পড়তে পারেন:

<resources>
    <string name="hello">Hello StackOverflow!</string>
</resources>

এবং একটি পরিবর্তনশীল মধ্যে সেট:

String mymessage = getString(R.string.hello);

তবে আমরা স্ট্রিংটিকে ভিউতে সংজ্ঞায়িত করতে পারি:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.