2013-03-16 140 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属性的部分将起作用。

希望有所帮助。