簡體   English   中英

從右到左設備上的Android TextView右對齊

[英]Android TextView right alignment on a right-to-left device

我正在編寫一個以希伯來語顯示的應用程序,因此我正確地對齊TextView的文本。 在Nexus設備上進行開發時,所有工作都很棒並且文本顯示應該使用,對於TextView使用android:gravity =“right”。 當我在運行自定義ROM的本地移動運營商設備(以色列)上運行相同的應用程序時,所有使用gravity =“right”設置的TextView小部件看起來好像被設置為gravity =“left”。 如果我去將重力改為左(你猜對了......)它會對齊。

我嘗試使用代碼並使用設備配置本身將設備的默認語言環境更改回美國英語。 什么都沒有幫助。 我正在研究的運營商設備是Galaxy SII。

在我看來,曾經創建ROM的人只是改變了對齊值,現在正確意味着左右意味着正確。 ROM是三星的官方ROM。

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

我已經嘗試過的方法:1。從設置菜單中更改設備區域設置。 2.以編程方式更改設備區域設置。 3.強制布局文件中的根布局為left / right layout_gravity / gravity

目前唯一有效的方法是將TextView的重力改為左側,這意味着它將停止在Nexus等全球設備上工作......

回答我自己的問題。

看了一遍后我找不到答案。 因為ROM是為居住在以色列並講希伯來語的人定制的,所以似乎翻轉了寬度MATCH_PARENT TextView內的對齊方式。 意思是,左對齊意味着右和右意味着左。 更改它的唯一方法是將TextView與WRAP_CONTENT一起使用,並將TextView本身對齊在其父級內部的右側。 因為我已經編寫了應用程序和所有屏幕布局,所以我不想改變一切。 所以我所做的是實現了一個自定義控件,它將TextView包裝在LinearLayout中並公開它以便從外面使用。 這樣,MATCH_PARENT將影響LinearLayout,而控件將負責將包裝的TextView對齊到右側。

這是如何:

首先,控件類本身(HebrewTextView.java):

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();
    }               
}
}

值/ attrs.xml下的控件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屬性的部分將起作用。

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM