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

修改后的样式:

修改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