feat:add maxWidth and maxHeight for text

This commit is contained in:
pengfei.zhou 2020-03-23 16:23:41 +08:00 committed by osborn
parent 7f16aa23ae
commit fe33a18213
11 changed files with 89 additions and 2 deletions

View File

@ -16,6 +16,7 @@
package pub.doric.shader; package pub.doric.shader;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.text.TextUtils;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.Gravity; import android.view.Gravity;
import android.widget.TextView; import android.widget.TextView;
@ -24,6 +25,7 @@ import com.github.pengfeizhou.jscore.JSValue;
import pub.doric.DoricContext; import pub.doric.DoricContext;
import pub.doric.extension.bridge.DoricPlugin; import pub.doric.extension.bridge.DoricPlugin;
import pub.doric.utils.DoricUtils;
/** /**
* @Description: widget * @Description: widget
@ -41,6 +43,7 @@ public class TextNode extends ViewNode<TextView> {
TextView tv = new TextView(getContext()); TextView tv = new TextView(getContext());
tv.setGravity(Gravity.CENTER); tv.setGravity(Gravity.CENTER);
tv.setMaxLines(1); tv.setMaxLines(1);
tv.setEllipsize(TextUtils.TruncateAt.END);
return tv; return tv;
} }
@ -87,6 +90,12 @@ public class TextNode extends ViewNode<TextView> {
view.setTypeface(iconFont); view.setTypeface(iconFont);
} }
break;
case "maxWidth":
view.setMaxWidth(DoricUtils.dp2px(prop.asNumber().toFloat()));
break;
case "maxHeight":
view.setMaxHeight(DoricUtils.dp2px(prop.asNumber().toFloat()));
break; break;
default: default:
super.blend(view, name, prop); super.blend(view, name, prop);

View File

@ -26,13 +26,27 @@
#import "Doric.h" #import "Doric.h"
@interface DoricTextView : UILabel @interface DoricTextView : UILabel
@property(nonatomic, assign) CGFloat maxWidth;
@property(nonatomic, assign) CGFloat maxHeight;
@end @end
@implementation DoricTextView @implementation DoricTextView
- (void)drawTextInRect:(CGRect)rect { - (void)drawTextInRect:(CGRect)rect {
[super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.padding)]; [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.padding)];
} }
- (CGSize)measureSize:(CGSize)targetSize {
CGSize measuredSize = [super measureSize:targetSize];
CGFloat measuredWidth = measuredSize.width;
CGFloat measuredHeight = measuredSize.height;
if (self.maxWidth > 0) {
measuredWidth = MIN(self.maxWidth, measuredSize.width);
}
if (self.maxHeight > 0) {
measuredHeight = MIN(self.maxHeight, measuredSize.height);
}
return CGSizeMake(measuredWidth, measuredHeight);
}
@end @end
@implementation DoricTextNode @implementation DoricTextNode
@ -82,6 +96,14 @@ - (void)blendView:(UILabel *)view forPropName:(NSString *)name propValue:(id)pro
font = [UIFont fontWithDescriptor:fontDescriptor size:0]; font = [UIFont fontWithDescriptor:fontDescriptor size:0];
} }
view.font = font; view.font = font;
} else if ([name isEqualToString:@"maxWidth"]) {
if ([view isKindOfClass:DoricTextView.class]) {
((DoricTextView *) view).maxWidth = [prop floatValue];
}
} else if ([name isEqualToString:@"maxHeight"]) {
if ([view isKindOfClass:DoricTextView.class]) {
((DoricTextView *) view).maxHeight = [prop floatValue];
}
} else if ([name isEqualToString:@"font"]) { } else if ([name isEqualToString:@"font"]) {
NSString *iconfont = prop; NSString *iconfont = prop;
UIFont *font = [UIFont fontWithName:iconfont size:view.font.pointSize]; UIFont *font = [UIFont fontWithName:iconfont size:view.font.pointSize];

View File

@ -1620,6 +1620,14 @@ var Text = /** @class */ (function (_super) {
Property, Property,
__metadata$3("design:type", String) __metadata$3("design:type", String)
], Text.prototype, "font", void 0); ], Text.prototype, "font", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "maxWidth", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "maxHeight", void 0);
return Text; return Text;
}(View)); }(View));
function text(config) { function text(config) {

View File

@ -1204,6 +1204,14 @@ __decorate$3([
Property, Property,
__metadata$3("design:type", String) __metadata$3("design:type", String)
], Text.prototype, "font", void 0); ], Text.prototype, "font", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "maxWidth", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "maxHeight", void 0);
function text(config) { function text(config) {
const ret = new Text; const ret = new Text;
ret.layoutConfig = layoutConfig().fit(); ret.layoutConfig = layoutConfig().fit();

View File

@ -2663,6 +2663,14 @@ __decorate$3([
Property, Property,
__metadata$3("design:type", String) __metadata$3("design:type", String)
], Text.prototype, "font", void 0); ], Text.prototype, "font", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "maxWidth", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "maxHeight", void 0);
function text(config) { function text(config) {
const ret = new Text; const ret = new Text;
ret.layoutConfig = layoutConfig().fit(); ret.layoutConfig = layoutConfig().fit();

4
doric-js/index.d.ts vendored
View File

@ -472,6 +472,8 @@ declare module 'doric/lib/src/widget/text' {
textAlignment?: Gravity; textAlignment?: Gravity;
fontStyle?: "normal" | "bold" | "italic" | "bold_italic"; fontStyle?: "normal" | "bold" | "italic" | "bold_italic";
font?: string; font?: string;
maxWidth?: number;
maxHeight?: number;
} }
export class Text extends View implements IText { export class Text extends View implements IText {
text?: string; text?: string;
@ -481,6 +483,8 @@ declare module 'doric/lib/src/widget/text' {
textAlignment?: Gravity; textAlignment?: Gravity;
fontStyle?: "normal" | "bold" | "italic" | "bold_italic"; fontStyle?: "normal" | "bold" | "italic" | "bold_italic";
font?: string; font?: string;
maxWidth?: number;
maxHeight?: number;
} }
export function text(config: IText): Text; export function text(config: IText): Text;
} }

View File

@ -9,6 +9,8 @@ export interface IText extends IView {
textAlignment?: Gravity; textAlignment?: Gravity;
fontStyle?: "normal" | "bold" | "italic" | "bold_italic"; fontStyle?: "normal" | "bold" | "italic" | "bold_italic";
font?: string; font?: string;
maxWidth?: number;
maxHeight?: number;
} }
export declare class Text extends View implements IText { export declare class Text extends View implements IText {
text?: string; text?: string;
@ -18,5 +20,7 @@ export declare class Text extends View implements IText {
textAlignment?: Gravity; textAlignment?: Gravity;
fontStyle?: "normal" | "bold" | "italic" | "bold_italic"; fontStyle?: "normal" | "bold" | "italic" | "bold_italic";
font?: string; font?: string;
maxWidth?: number;
maxHeight?: number;
} }
export declare function text(config: IText): Text; export declare function text(config: IText): Text;

View File

@ -56,6 +56,14 @@ __decorate([
Property, Property,
__metadata("design:type", String) __metadata("design:type", String)
], Text.prototype, "font", void 0); ], Text.prototype, "font", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "maxWidth", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "maxHeight", void 0);
export function text(config) { export function text(config) {
const ret = new Text; const ret = new Text;
ret.layoutConfig = layoutConfig().fit(); ret.layoutConfig = layoutConfig().fit();

View File

@ -26,6 +26,8 @@ export interface IText extends IView {
textAlignment?: Gravity textAlignment?: Gravity
fontStyle?: "normal" | "bold" | "italic" | "bold_italic" fontStyle?: "normal" | "bold" | "italic" | "bold_italic"
font?: string font?: string
maxWidth?: number
maxHeight?: number
} }
export class Text extends View implements IText { export class Text extends View implements IText {
@ -49,6 +51,12 @@ export class Text extends View implements IText {
@Property @Property
font?: string font?: string
@Property
maxWidth?: number
@Property
maxHeight?: number
} }
export function text(config: IText) { export function text(config: IText) {

View File

@ -2721,6 +2721,14 @@ __decorate$3([
Property, Property,
__metadata$3("design:type", String) __metadata$3("design:type", String)
], Text.prototype, "font", void 0); ], Text.prototype, "font", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "maxWidth", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "maxHeight", void 0);
function text(config) { function text(config) {
const ret = new Text; const ret = new Text;
ret.layoutConfig = layoutConfig().fit(); ret.layoutConfig = layoutConfig().fit();

File diff suppressed because one or more lines are too long