如何在android中使用TextView Ex,(Text Justify)类

时间:2014-11-14 13:02:57

标签: android user-interface textview justify

我正在尝试使用TextViewEx,(Textjustify) [link](https://github.com/bluejamesbond/TextJustify-Android) 在我的项目中获取文本对齐效果,但如果我将文件直接复制并粘贴到我的项目中,则文件会出现错误,例如缺少某些内容(其他文件)。我也搜索了如何使用TextViewEx,但我得到的结果如下 [link](TextViewEx, (Textjustify)) 在这个有人告诉将文件导入根文件夹。它是什么意思(根文件夹)。此外,如果任何人有示例代码使用TextViewEx或任何其他简单的方法来证明Android中的文本或示例文本证明理由,那么请帮助我谢谢。

1 个答案:

答案 0 :(得分:0)

嗯我已经挣扎了很多但是找不到任何帮助来解决这个问题,但我找到了另一种方法来证明文本的合理性。如果有人对文本的证明有问题,请使用此类。

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.webkit.WebChromeClient;
import android.webkit.WebView;

public class JustifiedTextView extends WebView {
    private String core = "<html><body style='text-align:justify;color:rgba(%s);font-size:%dpx;margin: 0px 0px 0px 0px;'>%s</body></html>";
    private String text;
    private int textColor;
    private int backgroundColor;
    private int textSize;

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

    public JustifiedTextView(Context context, AttributeSet attrs, int i) {
        super(context, attrs, i);
        init(attrs);
    }

    @SuppressWarnings("deprecation")
    @SuppressLint("NewApi")
    public JustifiedTextView(Context context, AttributeSet attrs, int i,
            boolean b) {
        super(context, attrs, i, b);
        init(attrs);
    }

    private void init(AttributeSet attrs) {
        TypedArray a = getContext().obtainStyledAttributes(attrs,
                R.styleable.JustifiedTextView);

        text = a.getString(R.styleable.JustifiedTextView_text);
        if (text == null)
            text = "";
        textColor = a.getColor(R.styleable.JustifiedTextView_textColor,
                Color.BLACK);
        backgroundColor = a.getColor(
                R.styleable.JustifiedTextView_backgroundColor,
                Color.TRANSPARENT);
        textSize = a.getInt(R.styleable.JustifiedTextView_textSize, 12);

        a.recycle();

        this.setWebChromeClient(new WebChromeClient() {
        });
        reloadData();
    }

    public void setText(String s) {
        if (s == null)
            this.text = "";
        else
            this.text = s;
        reloadData();
    }

    @SuppressLint("NewApi")
    private void reloadData() {

        if (text != null) {
            String data = String
                    .format(core, toRgba(textColor), textSize, text);
            Log.d("test", data);
            this.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);
        }

        // set WebView's background color *after* data was loaded.
        super.setBackgroundColor(backgroundColor);

        // Hardware rendering breaks background color to work as expected.
        // Need to use software renderer in that case.
        if (android.os.Build.VERSION.SDK_INT >= 11)
            this.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
    }

    public void setTextColor(int hex) {
        textColor = hex;
        reloadData();
    }

    public void setBackgroundColor(int hex) {
        backgroundColor = hex;
        reloadData();
    }

    public void setTextSize(int textSize) {
        this.textSize = textSize;
        reloadData();
    }

    @SuppressLint("DefaultLocale")
    private String toRgba(int hex) {
        String h = Integer.toHexString(hex);
        int a = Integer.parseInt(h.substring(0, 2), 16);
        int r = Integer.parseInt(h.substring(2, 4), 16);
        int g = Integer.parseInt(h.substring(4, 6), 16);
        int b = Integer.parseInt(h.substring(6, 8), 16);
        return String.format("%d,%d,%d,%d", r, g, b, a);
    }
}

这是attrib.xml类

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="JustifiedTextView">
        <attr name="text" format="string" localization="suggested" />
        <attr name="textColor" format="color|reference" />
        <attr name="backgroundColor" format="color|reference" />
        <attr name="textSize" format="integer" min="1" />
    </declare-styleable>

</resources>

在布局类中,将其用作

<com.example.animationtest.JustifiedTextView
    android:id="@+id/tjTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    app:text="Your Text Here" >
</com.example.animationtest.JustifiedTextView>

com.example.animationtest是项目中的包名,您放置文件JustifiedTextView.class

在类后面的代码中访问控件

JustifiedTextView tjTextView;
tvTextView2.setTextSize(convertToDp(24));
tjTextView.setTextColor(Color.RED);
tjTextView.setTextSize((int) convertFromDp(18));

其中convertFromDp用于根据屏幕获取文本大小。

public float convertFromDp(int input) {
    final float scale = getResources().getDisplayMetrics().density;
    return ((input - 0.5f) / scale);
}