301 lines
8.0 KiB
Plaintext
301 lines
8.0 KiB
Plaintext
import Context from 'android.content.Context'
|
|
import LinearLayout from 'android.widget.LinearLayout';
|
|
import ViewGroup from 'android.view.ViewGroup';
|
|
import View from 'android.view.View';
|
|
import TextView from 'android.widget.TextView';
|
|
import ImageView from 'android.widget.ImageView';
|
|
import Gravity from 'android.view.Gravity';
|
|
import Color from 'android.graphics.Color';
|
|
import Activity from 'android.app.Activity';
|
|
// import CardView from 'androidx.cardview.widget.CardView';
|
|
import { ref, } from "vue"
|
|
import TextUtils from 'android.text.TextUtils';
|
|
import GradientDrawable from 'android.graphics.drawable.GradientDrawable'
|
|
import MotionEvent from 'android.view.MotionEvent';
|
|
import Typeface from 'android.graphics.Typeface';
|
|
import {hexToRgb,getDefaultColor,toFillMarginAr} from "../util/xCoreColorUtil.uts"
|
|
import {getUid,dp2px} from "../util/xCoreUtil.uts"
|
|
|
|
import xView from "./view.uts";
|
|
|
|
class xText extends xView {
|
|
override view:any
|
|
constructor(context : Context,str:string=""){
|
|
super(context);
|
|
let view = new TextView(context);
|
|
let layoutParams_crd = new LinearLayout.LayoutParams(
|
|
ViewGroup.LayoutParams.WRAP_CONTENT,
|
|
ViewGroup.LayoutParams.WRAP_CONTENT,
|
|
(1).toFloat()
|
|
)
|
|
view.setText(str);
|
|
view.setLayoutParams(layoutParams_crd);
|
|
|
|
this.bgView = new GradientDrawable();
|
|
this.bgView.setShape(0x00000000)
|
|
this.bgView.setColor(Color.WHITE)
|
|
this.bgView.mutate()
|
|
view.setBackground(this.bgView)
|
|
|
|
this.view = view;
|
|
}
|
|
override getView():View{
|
|
|
|
return this.view as View;
|
|
}
|
|
override setBackgroundColor(colorStr : string) : xText {
|
|
this.bgView.mutate()
|
|
if(colorStr == 'transparent'){
|
|
this.bgView.setColor(Color.TRANSPARENT)
|
|
}else{
|
|
this.bgView.setColor(Color.parseColor(getDefaultColor(colorStr)))
|
|
}
|
|
|
|
return this;
|
|
}
|
|
override setBorder(w?:number,colorStr?:string,dashed?:boolean) : xText {
|
|
this.bgView.mutate()
|
|
|
|
let tw:number = 1;
|
|
let tcolor = 'transparent';
|
|
let tdashed = false;
|
|
if(typeof tw !== 'undefined'){
|
|
tw = w as number;
|
|
}
|
|
if(typeof tw !== 'undefined'){
|
|
tcolor = colorStr as string;
|
|
}
|
|
|
|
if(typeof dashed !== 'undefined'){
|
|
tdashed = dashed as boolean;
|
|
}
|
|
|
|
let colorNum = Color.TRANSPARENT;
|
|
if(tcolor != 'transparent'){
|
|
colorNum = Color.parseColor(getDefaultColor(tcolor));
|
|
}
|
|
if(dashed == true){
|
|
let dashedWidth = dp2px(6)
|
|
let dashedGap = dp2px(4)
|
|
this.bgView.setStroke(dp2px(tw).toInt(),colorNum,dashedWidth.toFloat(),dashedGap.toFloat())
|
|
}else{
|
|
this.bgView.setStroke(dp2px(tw).toInt(),colorNum)
|
|
}
|
|
|
|
|
|
return this;
|
|
}
|
|
override setRadius(radius:any) : xText{
|
|
let x =0
|
|
let y =0
|
|
this.bgView.mutate()
|
|
if(Array.isArray(radius)){
|
|
let rd = radius as number[];
|
|
if(rd.length==0){
|
|
let rdfs = 0;
|
|
this.bgView.setCornerRadius(dp2px(rdfs).toFloat());
|
|
// view.setBackground(this.bgView)
|
|
}else if(rd.length==1){
|
|
let rdfs = rd[0];
|
|
this.bgView.setCornerRadius(dp2px(rdfs).toFloat());
|
|
// view.setBackground(this.bgView)
|
|
}else if(rd.length==2){
|
|
let tl = [
|
|
dp2px(rd[0]).toFloat(),dp2px(rd[0]).toFloat(),
|
|
dp2px(rd[1]).toFloat(),dp2px(rd[1]).toFloat(),
|
|
x.toFloat(),x.toFloat(),
|
|
x.toFloat(),x.toFloat()
|
|
]
|
|
let tlint = tl.toKotlinList().toFloatArray()
|
|
this.bgView.setCornerRadii(tlint);
|
|
}else if(rd.length==3){
|
|
let tl = [
|
|
dp2px(rd[0]).toFloat(),dp2px(rd[0]).toFloat(),
|
|
dp2px(rd[1]).toFloat(),dp2px(rd[1]).toFloat(),
|
|
dp2px(rd[2]).toFloat(),dp2px(rd[2]).toFloat(),
|
|
x.toFloat(),x.toFloat()
|
|
]
|
|
let tlint = tl.toKotlinList().toFloatArray()
|
|
this.bgView.setCornerRadii(tlint);
|
|
}else if(rd.length==4){
|
|
let tl = [
|
|
dp2px(rd[0]).toFloat(),dp2px(rd[0]).toFloat(),
|
|
dp2px(rd[1]).toFloat(),dp2px(rd[1]).toFloat(),
|
|
dp2px(rd[2]).toFloat(),dp2px(rd[2]).toFloat(),
|
|
dp2px(rd[3]).toFloat(),dp2px(rd[3]).toFloat(),
|
|
]
|
|
let tlint = tl.toKotlinList().toFloatArray()
|
|
this.bgView.setCornerRadii(tlint);
|
|
}
|
|
}else{
|
|
|
|
let rd = radius as number;
|
|
|
|
this.bgView.setCornerRadius(dp2px(rd).toFloat());
|
|
}
|
|
|
|
|
|
return this;
|
|
}
|
|
|
|
setFontSize(n:number):xText{
|
|
let view = this.view as TextView;
|
|
view.setTextSize(dp2px(n).toFloat())
|
|
return this;
|
|
}
|
|
setFontColor(str:string):xText{
|
|
let view = this.view as TextView;
|
|
view.setTextColor(Color.parseColor(getDefaultColor(str)))
|
|
|
|
return this;
|
|
}
|
|
//是否允许复制。
|
|
setTextIsSelectable(isSelectet:boolean):xText{
|
|
let view = this.view as TextView;
|
|
view.setTextIsSelectable(isSelectet)
|
|
return this;
|
|
}
|
|
//bold,normal,ligth
|
|
setFontWeight(str:string):xText{
|
|
let view = this.view as TextView;
|
|
if(str=='bold'){
|
|
view.setTypeface(null,Typeface.BOLD)
|
|
}else{
|
|
view.setTypeface(null,Typeface.NORMAL)
|
|
}
|
|
return this;
|
|
}
|
|
setFontStyle(str:string):xText{
|
|
let view = this.view as TextView;
|
|
if(str=='italtc'){
|
|
view.setTypeface(null,Typeface.ITALIC)
|
|
}else if(str=='italtc-bold'){
|
|
view.setTypeface(null,Typeface.BOLD_ITALIC)
|
|
}
|
|
return this;
|
|
}
|
|
setText(str:string):xText{
|
|
let view = this.view as TextView;
|
|
view.setText(str)
|
|
|
|
return this;
|
|
}
|
|
override setPadding(n:any):xText{
|
|
let view = this.view as TextView;
|
|
if(Array.isArray(n)){
|
|
let rd = n as number[];
|
|
if(rd.length==0){
|
|
let rds = 0;
|
|
let rdf = dp2px(rds).toInt();
|
|
view.setPadding(rdf,rdf,rdf,rdf)
|
|
}else if(rd.length==1){
|
|
let rdf = dp2px(rd[0]).toInt();
|
|
view.setPadding(rdf,rdf,rdf,rdf)
|
|
}else if(rd.length==2){
|
|
view.setPadding(dp2px(rd[0]).toInt(),dp2px(rd[1]).toInt(),dp2px(rd[0]).toInt(),dp2px(rd[1]).toInt())
|
|
}else if(rd.length==3){
|
|
let rds = 0;
|
|
let rdf = rds.toInt();
|
|
view.setPadding(dp2px(rd[0]).toInt(),dp2px(rd[1]).toInt(),dp2px(rd[2]).toInt(),rdf)
|
|
}else if(rd.length==4){
|
|
view.setPadding(dp2px(rd[0]).toInt(),dp2px(rd[1]).toInt(),dp2px(rd[2]).toInt(),dp2px(rd[3]).toInt())
|
|
}
|
|
}else{
|
|
|
|
let rd = n as number;
|
|
let rdf = dp2px(rd).toInt();
|
|
view.setPadding(rdf,rdf,rdf,rdf)
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
//让内容的对齐方向,
|
|
//https://developer.android.google.cn/reference/kotlin/android/view/Gravity
|
|
//只有xTextView,有这个属性。
|
|
setAlign(cr:Int) : xText{
|
|
let view = this.view as TextView;
|
|
view.setGravity(cr)
|
|
return this;
|
|
}
|
|
//追加文本
|
|
//start,end不填写就追加到末尾。
|
|
setIcon(code:string,start:number=0,end:number=0) : xText{
|
|
let view = this.view as TextView;
|
|
let nowText = view.getText().toString();
|
|
|
|
let assetManager = view.getContext()!.getAssets();
|
|
let typeface = Typeface.createFromAsset(assetManager, "remixicon.ttf")
|
|
view.setTypeface(typeface)
|
|
|
|
if(!TextUtils.isEmpty(code)){
|
|
let codePoint = Integer.parseInt(code, 16);
|
|
let charArray = Character.toChars(codePoint);
|
|
let text = new String(charArray);
|
|
view.setText(text+" "+nowText);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
setLayoutParams(width?:number,height?:number,layouWidth?:number) : xText{
|
|
let view = this.view as TextView;
|
|
let w = (0).toInt();
|
|
let h = ViewGroup.LayoutParams.WRAP_CONTENT;
|
|
let flex = (1).toFloat();
|
|
|
|
if(typeof width =='number'){
|
|
w = width!.toInt();
|
|
}
|
|
if(typeof height =='number'){
|
|
h = height!.toInt();
|
|
}
|
|
if(typeof layouWidth =='number'){
|
|
flex = layouWidth!.toFloat();
|
|
}
|
|
|
|
let layoutParams_crd = new LinearLayout.LayoutParams(
|
|
w,
|
|
h,
|
|
flex
|
|
)
|
|
view.setLayoutParams(layoutParams_crd);
|
|
|
|
return this;
|
|
}
|
|
|
|
setLineHeight(line:number) : xText{
|
|
let view = this.view as TextView;
|
|
view.setLineHeight(line.toInt())
|
|
return this;
|
|
}
|
|
setLetterSpacing(space:number) : xText{
|
|
let view = this.view as TextView;
|
|
view.setLineHeight(space.toInt())
|
|
return this;
|
|
}
|
|
setHighlightColor(color:string) : xText{
|
|
let view = this.view as TextView;
|
|
if(!TextUtils.isEmpty(color)){
|
|
view.setHighlightColor(Color.parseColor(getDefaultColor(color)))
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
|
|
// 设置文字的省略情况,0表示不显示省略号,数字表示几行显示省略号。
|
|
setEllipsis(lines:number=0) : xText{
|
|
let view = this.view as TextView;
|
|
if(lines>0){
|
|
view.setMaxLines(lines.toInt())
|
|
view.setEllipsize(TextUtils.TruncateAt.END)
|
|
}else{
|
|
view.setMaxLines((1).toInt())
|
|
view.setEllipsize(null)
|
|
}
|
|
return this;
|
|
}
|
|
|
|
}
|
|
|
|
export default xText; |