Delphi 10.1.2 edit控件在android默认的复制、剪切和粘贴样式太丑,经悟能-DelphiTeacher的提示,用最简单的代码修改后稍有改观。

默认的样式:

76444cc8ee7c580d70ac3f13bf38c3a1.png

修改后的样式:

6aa89efdcaeccf7c8cb9ba9c404b043b.png

修改FMX.Platform.Android.pas

找到procedure TWindowManager.ShowContextMenu(const ItemsToShow: TContextMenuItems),按下面的红字增加Copy、cut和Paste button的setBackgroundColor属性。

FCopyButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改

FCutButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改

FPasteButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改

procedure TWindowManager.ShowContextMenu(const ItemsToShow: TContextMenuItems);

var

LA: TTextLayout;

P: TPoint;

HasSelection, HasClipboard: Boolean;

ApproxWidth: Integer;

ApproxHeight: Integer;

ClipboardValue: TValue;

ResID: Integer;

TextInput: ITextInput;

VirtualKeyboard: IVirtualKeyboardControl;

ClipboardSvc: IFMXClipboardService;

begin

DestroyPasteMenuTimer;

ApproxWidth := FContextMenuPopupSize.cx;

ApproxHeight := FContextMenuPopupSize.cy;

if not FContextMenuVisible and Supports(FFocusedControl, ITextInput, TextInput) and not FSelectionInProgress then

begin

FContextMenuVisible := True;

HasSelection := not TextInput.GetSelection.IsEmpty;

TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, ClipboardSvc);

ClipboardValue := ClipboardSvc.GetClipboard;

HasClipboard := not ClipboardValue.IsEmpty and not ClipboardValue.ToString.IsEmpty;

if FContextMenuPopup = nil then

begin

FContextMenuLayout := TJLinearLayout.JavaClass.init(TAndroidHelper.Activity);

FContextButtonsLayout := TJLinearLayout.JavaClass.init(TAndroidHelper.Activity);

LA := TTextLayoutManager.DefaultTextLayout.Create;

LA.Font.Style := LA.Font.Style + [TFontStyle.fsBold];

P := Point(0, 0);

Supports(FFocusedControl, IVirtualKeyboardControl, VirtualKeyboard);

if HasSelection then

begin

//Copy button

if (TContextMenuItem.Copy in ItemsToShow) and ((VirtualKeyboard = nil) or not VirtualKeyboard.IsPassword) then

begin

ResID := TAndroidHelper.GetResourceID('android:string/copy');

if ResID <> 0 then

LA.Text := TAndroidHelper.GetResourceString(ResID)

else

LA.Text := SEditCopy.ToUpper;

FCopyButton := TJButton.JavaClass.init(TAndroidHelper.Activity);

if ResID <> 0 then

FCopyButton.setText(ResID)

else

FCopyButton.setText(StrToJCharSequence(LA.Text));

FCopyButton.setTypeface(TJTypeface.JavaClass.DEFAULT_BOLD);

FCopyButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改

FCopyClickListener := TCopyButtonClickListener.Create;

FCopyButton.setOnClickListener(FCopyClickListener);

LA.Font.Size := FCopyButton.getTextSize;

P.X := P.X + Ceil((LA.TextWidth + 2) * FScale);

P.Y := Max(P.Y, Ceil((LA.TextHeight + 2) * FScale));

ApproxHeight := P.Y + FCopyButton.getPaddingTop + FCopyButton.getPaddingBottom;

end;

//Cut button

if (TContextMenuItem.Cut in ItemsToShow) and not TextReadOnly and ((VirtualKeyboard = nil) or not VirtualKeyboard.IsPassword) then

begin

ResID := TAndroidHelper.GetResourceID('android:string/cut');

if ResID <> 0 then

LA.Text := TAndroidHelper.GetResourceString(ResID)

else

LA.Text := SEditCut.ToUpper;

FCutButton := TJButton.JavaClass.init(TAndroidHelper.Activity);

if ResID <> 0 then

FCutButton.setText(ResID)

else

FCutButton.setText(StrToJCharSequence(LA.Text));

FCutButton.setTypeface(TJTypeface.JavaClass.DEFAULT_BOLD);

FCutButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改

FCutClickListener := TCutButtonClickListener.Create;

FCutButton.setOnClickListener(FCutClickListener);

LA.Font.Size := FCopyButton.getTextSize;

P.X := P.X + Ceil((LA.TextWidth + 2) * FScale);

P.Y := Max(P.Y, Ceil((LA.TextHeight + 2) * FScale));

end;

end;

if HasClipboard and (TContextMenuItem.Paste in ItemsToShow) and not TextReadOnly then

begin

//Paste button

ResID := TAndroidHelper.GetResourceID('android:string/paste');

if ResID <> 0 then

LA.Text := TAndroidHelper.GetResourceString(ResID)

else

LA.Text := SEditPaste.ToUpper;

FPasteButton := TJButton.JavaClass.init(TAndroidHelper.Activity);

if ResID <> 0 then

FPasteButton.setText(ResID)

else

FPasteButton.setText(StrToJCharSequence(LA.Text));

FPasteButton.setTypeface(TJTypeface.JavaClass.DEFAULT_BOLD);

FPasteButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改

FPasteClickListener := TPasteButtonClickListener.Create;

FPasteButton.setOnClickListener(FPasteClickListener);

LA.Font.Size := FPasteButton.getTextSize;

P.X := P.X + Ceil((LA.TextWidth + 2) * FScale);

P.Y := Max(P.Y, Ceil((LA.TextHeight + 2) * FScale));

if ApproxHeight = 0 then

ApproxHeight := P.Y + FPasteButton.getPaddingTop + FPasteButton.getPaddingBottom;

end;

https://www.cnblogs.com/qiufeng2014/p/6574701.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐