国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

如何在Android開(kāi)發(fā)中實(shí)現(xiàn)TextView兩端對(duì)齊

在Android應(yīng)用程序的開(kāi)發(fā)過(guò)程中,TextView是一個(gè)常用的控件,它可以用來(lái)顯示文本內(nèi)容。然而,有時(shí)候我們需要讓TextView的文本內(nèi)容實(shí)現(xiàn)兩端對(duì)齊的效果,以提高用戶閱讀體驗(yàn)。下面將介紹如何在

在Android應(yīng)用程序的開(kāi)發(fā)過(guò)程中,TextView是一個(gè)常用的控件,它可以用來(lái)顯示文本內(nèi)容。然而,有時(shí)候我們需要讓TextView的文本內(nèi)容實(shí)現(xiàn)兩端對(duì)齊的效果,以提高用戶閱讀體驗(yàn)。下面將介紹如何在Android開(kāi)發(fā)中實(shí)現(xiàn)TextView的兩端對(duì)齊。

1. 引入必要的文件代碼

為了實(shí)現(xiàn)TextView的兩端對(duì)齊效果,我們需要引入WeDroidAlignTextView類的文件。這個(gè)類繼承自TextView類并重寫(xiě)了onDraw方法,在該方法中實(shí)現(xiàn)了兩端對(duì)齊的邏輯。因此,我們需要把文件復(fù)制到項(xiàng)目中,并在需要使用的Activity中引入該文件。

2. TextView類方法代碼

在WeDroidAlignTextView類中,我們需要調(diào)用TextView類中的setGravity方法,將TextView的gravity屬性設(shè)置為L(zhǎng)EFT|CENTER_VERTICAL,以保證文本內(nèi)容垂直居中并靠左對(duì)齊。同時(shí),我們還需要將TextView的textIsSelectable屬性設(shè)置為false,以避免出現(xiàn)選中文本后無(wú)法實(shí)現(xiàn)兩端對(duì)齊的問(wèn)題。

```

@Override

public void setGravity(int gravity) {

if ((gravity Gravity.HORIZONTAL_GRAVITY_MASK) Gravity.LEFT) {

mTextAlignment _NORMAL;

} else if ((gravity Gravity.HORIZONTAL_GRAVITY_MASK) Gravity.RIGHT) {

mTextAlignment _OPPOSITE;

} else if ((gravity Gravity.HORIZONTAL_GRAVITY_MASK) _HORIZONTAL) {

mTextAlignment _CENTER;

} else {

mTextAlignment _NORMAL;

}

(gravity);

}

@Override

public boolean setTextIsSelectable(boolean selectable) {

return false;

}

```

3. WeDroidAlignTextView方法代碼

我們?cè)赪eDroidAlignTextView類中新增了一個(gè)方法:setAlignMode。這個(gè)方法用于設(shè)置兩端對(duì)齊的模式,可選值為ALIGN_NORMAL和ALIGN_FULL。ALIGN_NORMAL表示只有行末會(huì)出現(xiàn)空格,而ALIGN_FULL表示所有行末都會(huì)被填充空格以使得每行長(zhǎng)度相同。

```

public void setAlignMode(int mode) {

mAlignMode mode;

}

```

4. initTextInfo的方法代碼

在WeDroidAlignTextView類的構(gòu)造函數(shù)中,我們還新增了一個(gè)initTextInfo的方法。這個(gè)方法用于初始化TextView的一些相關(guān)屬性,包括textPaint、mMaxWidth等。

```

private void initTextInfo() {

textPaint getPaint();

(getCurrentTextColor());

textPaint.drawableState getDrawableState();

mMaxWidth (int) (getText(), getPaint());

}

```

5. onDraw方法代碼

在WeDroidAlignTextView類中,我們重寫(xiě)了onDraw方法,并在該方法中實(shí)現(xiàn)了TextView的兩端對(duì)齊邏輯。具體實(shí)現(xiàn)如下:

```

@Override

protected void onDraw(Canvas canvas) {

final fm ();

final int lineHeight - ;

final int viewWidth getWidth() - getPaddingLeft() - getPaddingRight();

final CharSequence text getText();

final int length text.length();

float[] widths new float[length];

(text, 0, length, widths);

int index 0;

int count 0;

float lineWidth 0;

float gap 0;

for (int i 0; i < length; i ) {

char c (i);

// 如果是換行符,則繪制當(dāng)前行

if (c '

') {

drawSingleLine(canvas, text, index, count, lineWidth, gap, viewWidth, lineHeight);

index count;

count 0;

lineWidth 0;

gap 0;

continue;

}

// 計(jì)算字符寬度

float w widths[i];

// 如果當(dāng)前行已經(jīng)超過(guò)了view的寬度,或者當(dāng)前字符是最后一個(gè)字符,則繪制當(dāng)前行

if (lineWidth w > viewWidth || i length - 1) {

if (i length - 1 lineWidth w < viewWidth) {

gap (viewWidth - lineWidth - w);

} else {

gap (viewWidth - lineWidth) / (count - 1);

}

drawSingleLine(canvas, text, index, count, lineWidth, gap, viewWidth, lineHeight);

index count;

count 0;

lineWidth 0;

gap 0;

}

lineWidth w;

count ;

}

}

```

上述代碼的主要思路是:根據(jù)TextView的寬度和每個(gè)字符的寬度,計(jì)算出每行最多可以放幾個(gè)字符;當(dāng)當(dāng)前行的字符數(shù)達(dá)到這個(gè)最大值時(shí),計(jì)算出每個(gè)字符之間需要填充的空格數(shù)量,并繪制當(dāng)前行。需要注意的是,為了避免出現(xiàn)中英文混排時(shí)導(dǎo)致的排版問(wèn)題,我們還需要判斷每個(gè)字符是否為中文,如果是中文則不進(jìn)行空格填充處理。

6. 判斷是否為中文的方法代碼

為了判斷一個(gè)字符是否為中文,我們新增了一個(gè)isChineseChar方法。

```

private boolean isChineseChar(char c) {

Character.UnicodeBlock ub Character.UnicodeBlock.of(c);

return ub Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS

|| ub Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS

|| ub Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A

|| ub _PUNCTUATION

|| ub Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION

|| ub Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS;

}

```

7. ToDBC處理的方法代碼

為了確保中英文混排時(shí)排版正確,我們還需要對(duì)字符串進(jìn)行全角轉(zhuǎn)半角處理。我們新增了一個(gè)ToDBC方法,用于將字符串中的全角字符轉(zhuǎn)化為半角字符。

```

private String ToDBC(String input) {

char[] c ();

for (int i 0; i < c.length; i ) {

if (c[i] 12288) {

c[i] (char) 32;

continue;

}

if (c[i] > 65280 c[i] < 65375) {

c[i] (char) (c[i] - 65248);

}

}

return new String(c);

}

```

8. 測(cè)試的效果

經(jīng)過(guò)以上步驟,我們就可以在Android應(yīng)用程序中實(shí)現(xiàn)TextView的兩端對(duì)齊效果了。以下是實(shí)現(xiàn)效果展示圖:

![TextView兩端對(duì)齊](_)

希望以上介紹的方法能夠幫助大家在Android開(kāi)發(fā)中實(shí)現(xiàn)TextView的兩端對(duì)齊效果。

標(biāo)簽: