2013-03-16 85 views
4

我寫,顯示在希伯來語的應用程序,爲我是正確對齊的TextView的文本。 在Nexus設備上開發時,所有工作都很棒,文本顯示效果應該如此,對於TextView使用android:gravity =「right」。 當我在運行自定義ROM的本地移動運營商設備(以色列)上運行相同的應用程序時,所有使用gravity =「right」設置的TextView小部件都顯示爲好像它們被設置爲gravity =「left」。如果我去改變重力到左邊(你猜對了),它會正確對齊。的Android的TextView上右對齊從右到左設備

我試圖改變設備的默認語言環境回美國英語使用的代碼,並使用該設備配置本身。沒什麼幫助。 我正在使用的運營商設備是Galaxy SII。

我看來,像誰創造了有史以來ROM只是改變了對齊值,現在權是指左,左就是右。 ROM是三星的官方產品。

有沒有人遇到過這個問題?任何解決方案的想法?

我已經嘗試過: 1.更改從設置菜單中的設備區域。 2.以編程方式更改設備區域設置。 3.強制根佈局在佈局文件到左/右layout_gravity /重力

唯一的事情目前正在被改變的TextView到左,這意味着它停止在例如Nexus等全球設備工作的重心..

回答

4

回答我自己的問題。

看完了所有我沒有找到答案。由於ROM是爲居住在以色列並講希伯來語的人定製的,因此看起來MATCH_PARENT TextView寬度內的對齊方式被翻轉了。含義,左對齊意味着左右。 要改變這一點,唯一的方法是使用帶有WRAP_CONTENT的TextView,並將TextView自身對齊到其父項的右側。 因爲我已經編寫了應用程序和所有的屏幕布局,我不想改變一切。 所以我所做的是實現了一個自定義控件,它將一個TextView包裝在一個LinearLayout中,並從外部方便地使用它。 這樣,MATCH_PARENT將影響LinearLayout,而控件將負責將包裝的TextView對齊到右側。

這該是多麼:

首先,控制類本身(HebrewTextView.java):在值/ attrs.xml

public class HebrewTextView extends LinearLayout 
{ 
private TextView mTextView; 

public HebrewTextView(Context context) 
{ 
    super(context); 
    init(null); 
} 

public HebrewTextView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
    init(attrs); 
} 

public TextView getTextView() 
{ 
    return mTextView; 
} 

private void init(AttributeSet attrs) 
{  
    mTextView = new TextView(getContext()); 
    LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); 
    lp.gravity = Gravity.RIGHT; 
    mTextView.setLayoutParams(lp); 
    mTextView.setGravity(Gravity.CENTER_VERTICAL); 

    addView(mTextView); 

    if(attrs!=null) 
    { 
     TypedArray params = getContext().obtainStyledAttributes(attrs, R.styleable.HebrewTextView); 
     mTextView.setText(params.getString(R.styleable.HebrewTextView_android_text)); 
     mTextView.setTextColor(params.getColor(R.styleable.HebrewTextView_android_textColor, Color.WHITE)); 
     mTextView.setTextSize(params.getDimension(R.styleable.HebrewTextView_android_textSize, 10)); 
     mTextView.setSingleLine(params.getBoolean(R.styleable.HebrewTextView_android_singleLine, false)); 
     mTextView.setLines(params.getInt(R.styleable.HebrewTextView_android_lines, 1));      
     params.recycle(); 
    }    
} 
} 

控制XML屬性。請注意,自定義屬性與TextView屬性匹配,因此我不必更改佈局文件:

注意:這些是我需要的屬性,如果您使用的是更多,只需添加到XML並在init中讀取它()的類。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<declare-styleable name="HebrewTextView"> 
    <attr name="android:text"/> 
    <attr name="android:textColor"/> 
    <attr name="android:lines"/> 
    <attr name="android:textSize"/> 
    <attr name="android:singleLine"/>          
</declare-styleable> 
</resources> 

後做好了所有我所要做的就是在問題的佈局運行並與HebrewTextView更換TextView的,如果這是由代碼中引用一個TextView,改變鑄造。 getTextView()方法在控件類中定義,以便在添加.getTextView()後綴後,代碼中用於更改文本和/或其他TextView屬性的部分將起作用。

希望有所幫助。