android - एंड्रॉइड में टेक्स्ट दिशा-निर्देश कैसे प्राप्त करें और दिशा के अनुसार गतिशील रूप से बदलाव करें?




internationalization bidi (2)

समाधान, मैं सोच रहा था कि आसान था :) जावा के लिए धन्यवाद

बिडी क्लास है इस वर्ग को getBaseLevel () पद्धति है जो 0 देता है यदि आपका टेक्स्ट अन्यथा 1 से बाएं-से-दायां है (यदि दाएं से बाएं)।

तो, यह मेरा कोड है:

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        Bidi bidi = new Bidi(userList.get(position).getName(), Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
        if(bidi.getBaseLevel() == 0)
            convertView = myInflater.inflate(R.layout.list_add_friends_row, null);
        else
            convertView = myInflater.inflate(R.layout.list_add_friends_row_mirror, null);

...

और परिणाम है:

=============

अपडेट करें :

एक और तरीका है, baseIsLeftToRight () है कि अगर बयान में इस्तेमाल किया जाना बेहतर हो सकता है परिणाम ऊपर के समान था

Bidi bidi = new Bidi(userList.get(position).getName(), Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
if(bidi.baseIsLeftToRight())
                convertView = myInflater.inflate(R.layout.list_add_friends_row, null);
            else
                convertView = myInflater.inflate(R.layout.list_add_friends_row_mirror, null);

मैं एक पाठ की दिशा के आधार पर गतिशील रूप से बदलते यूआई की व्यवहार्यता के बारे में कुछ शोध कर रहा हूं। हालांकि Google आरटीएल भाषाओं का समर्थन कर रहा है (रेफरी: एंड्रॉइड 4.2 में नेटिव आरटीएल समर्थन ) लेकिन यह ऐसी स्थिति को शामिल नहीं करता है कि एप्लिकेशन में एलटीआर और आरटीएल सामग्री का मिश्रण है

Google का समाधान सही है अगर हमारे पास बहुभाषी ऐप है और इसकी विभिन्न भाषाओं में स्थिर डेटा (जैसे मेनू आइटम) के विभिन्न स्रोत हैं हालांकि, मुझे पाठ दस्तावेज़ की दिशा के आधार पर गतिशील रूप से लेआउट बदलने के बारे में कोई अन्य दस्तावेज़ नहीं मिला।

निम्नलिखित छवि मेरे परीक्षण ऐप के वर्तमान डिजाइन को दर्शाती है। सूची फेसबुक (मेरे दोस्तों की सूची) से आती है और इसमें अंग्रेजी और फारसी नाम शामिल हैं I

मेरे समाधान के अनुकूलन में दो लेआउट (एलटीआर के लिए एक और एक आरटीएल के लिए) और नाम की दिशा के आधार पर प्रत्येक को निर्दिष्ट करना है। इसलिए, मैंने कोड की निम्न पंक्तियां लिखी हैं:

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

            if(position % 2 == 0)
                convertView = myInflater.inflate(R.layout.list_add_friends_row, null);
            else
                convertView = myInflater.inflate(R.layout.list_add_friends_row_mirror, null);

            holder = new ViewHolder();

            holder.llSection = (LinearLayout) convertView.findViewById(R.id.section);
            holder.tvUserName = (TextView) convertView.findViewById(R.id.tvUserName);
            holder.ivPicture = (ImageView) convertView.findViewById(R.id.ivPicture);
            holder.btnAdd = (Button) convertView.findViewById(R.id.btnAdd);

            convertView.setTag(holder);



        holder.btnAdd.setTag(position);
        holder.tvUserName.setText(userList.get(position).getName());
        imageDownloader.displayImage(holder.ivPicture, userList.get(position).getPhotoUrl());

        ...

        return convertView;
    }

और परिणाम है:

मैंने पंक्तियों को प्रतिबिंबित किया है, यदि पंक्ति भी या अजीब है। अब, मेरा प्रश्न है कि नाम के आधार पर UI को कैसे मिरर करना है। मुझे लगता है कि मुझे खंड if(position % 2 == 0) से कुछ की तरह बदलना चाहिए if(isNameLTR(FIRST_CHAR_OF_NAME)) मुझे इस बारे में पता नहीं है कि इस पद्धति को कैसे कार्यान्वित करें।

मैं एक चरित्र कैसे जानता हूँ कि एलटीआर ओटी आरटीएल है? (मुझे लगता है कि एंड्रॉइड को पता है कि शब्द का पहला चरित्र आरटीएल या एलटीआर है, इसलिए जब पाठ दृश्य की चौड़ाई मैच माता-पिता होती है तो पाठ को सही में संरेखित करें, अगर चरित्र आरएलटी है और बाएं अगर चरित्र एलटीआर है)।

किसी भी सुझाव या टिप्पणी की सराहना की जाएगी धन्यवाद


सभी ग्रंथों को प्राप्त करने के लिए gravity साथ पाठ का उपयोग करें

android:gravity="right"
android:textAlignment="gravity"




bidi