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;
|
请发表评论