SO : Android 9.0
Fonte: código-fonte do Launcher3
Caminho : packages \ apps \ Launcher3
Um, modifique a configuração padrão
1. Modificação do ícone
Caminho: xml / device_profiles.xml
// 1024x600
<perfil
lançador: nome = "Nexus 7"
lançador: minWidthDps = "575"
lançador: minHeightDps = "904"
lançador: numRows = "3" número de ícones de linha
launcher: numColumns = "4" o número de ícones de coluna
lançador: numFolderRows = "4"
lançador: numFolderColumns = "5"
lançador: iconSize = tamanho do ícone "80"
lançador: iconTextSize = tamanho do texto "20"
lançador: numHotseatIcons = "7"
launcher: defaultLayoutId = "@ xml / default_workspace_5x6"
Configurar widgets predefinidos
Caminho: xml / default_workspace_5x6.xml
<appwidget
lançador: className = "com.wits.widget.WidgetProvider"
lançador: packageName = "com.wits.widget"
lançador: tela = "1"
lançador: spanX = "4"
lançador: spanY = "3"
lançador: x = "0"
lançador: y = "0" />
Configurar ícones predefinidos
Caminho: xml / default_workspace_5x6.xml
<favorito
iniciador: className = "com.google.android.apps.chrome.Main"
lançador: packageName = "com.android.chrome"
iniciador: tela = "2" é exibido na segunda tela
lançador: x = "0"
lançador: y = "0" />
Configure os APKs para serem filtrados e substitua os ícones personalizados
Como pode haver vários ícones em um APK, filtre e substitua pelo nome da classe.
Caminho: values / config.xml
<! - inteligência ->
<! - excluir nome da classe ->
<string-array name = "exclude_class_list" translatable = "false">
<item> com.wits.pms.TestActivity </item> Nome da classe do APK a ser oculto
</string-array>
<! - alterar ícone: ícone de atividade nome da classe ->
<string-array name = "icon_class_name" translatable = "false">
<item> com.google.android.apps.chrome.Main </item> o nome da classe correspondente ao ícone personalizado
<item> com.android.settings.Settings </item>
</string-array>
<! - alterar ícone: ícone @ drawable / theme_play ->
<string-array name = "icon_package_png" translatable = "false">
<! - google ->
<item> @ drawable / theme_play </item> a imagem correspondente ao ícone personalizado
<item> @ drawable / theme_google </item>
</string-array>
- Personalização do cliente Launcher3
- Remova o slide up display allapps
Caminho: com.android.launcher3.uioverrides.AllAppsSwipeController # canInterceptTouch
protected boolean canInterceptTouch (MotionEvent ev) {
...
if (mLauncher.isInState (ALL_APPS) &&! mLauncher.getAppsView (). shouldContainerScroll (ev)) {
retorna falso;
}
// adicionar início
if (FeatureFlags.CUSTOM_REMOVE) {
retorna falso;
}
//adendo
return true;
}
Remova a barra inferior do assento quente
Caminho: com.android.launcher3.Hotseat # setInsets
Proteja todos os códigos em setInsets.
Remova o widget, pressione e arraste
Caminho: com.android.launcher3.touch.ItemLongClickListener # onWorkspaceItemLongClick
private static boolean onWorkspaceItemLongClick (Exibir v) {
Launcher launcher = Launcher.getLauncher (v.getContext ());
if (! canStartDrag (launcher)) return false;
if (! launcher.isInState (NORMAL) &&! launcher.isInState (OVERVIEW)) return false;
if (! (v.getTag () instanceof ItemInfo)) return false;
launcher.setWaitingForResult (null);
// remove o recurso de arrastar do APP WIDGET
if (FeatureFlags.CUSTOM_REMOVE) {
if (((ItemInfo) v.getTag ()). itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET) {
retorna falso;
}
}
beginDrag (v, launcher, (ItemInfo) v.getTag (), new DragOptions ());
return true;
}
Remova a animação de salto no prompt do hotseat
Caminho: com.android.launcher3.Launcher # onResume
// remove o animador do hotseat
if (! FeatureFlags.CUSTOM_REMOVE) {
DiscoveryBounce.showForHomeIfNeeded (this);
}
Remova o quadro inferior gerado automaticamente pelo ícone do APP
Caminho: com.android.launcher3.graphics.LauncherIcons # normalizeAndWrapToAdaptiveIcon
private Drawable normalizeAndWrapToAdaptiveIcon (ícone Drawable, int iconAppTargetSdk,
RectF outIconBounds, float [] outScale) {
...
if ( ! FeatureFlags.CUSTOM_REMOVE && ((Utilities.ATLEAST_OREO && iconAppTargetSdk> = Build.VERSION_CODES.O) ||
Utilities.ATLEAST_P)) {
boolean [] outShape = novo booleano [1];
if (mWrapperIcon == null) {
mWrapperIcon = mContext.getDrawable (R.drawable.adaptive_icon_drawable_wrapper)
.mutate ();
}
AdaptiveIconDrawable dr = (AdaptiveIconDrawable) mWrapperIcon;
dr.setBounds (0, 0, 1, 1);
scale = getNormalizer (). getScale (ícone, outIconBounds, dr.getIconMask (), outShape);
if (Utilities.ATLEAST_OREO &&! outShape [0] &&! (icon instanceof AdaptiveIconDrawable)) {
FixedScaleDrawable fsd = ((FixedScaleDrawable) dr.getForeground ());
fsd.setDrawable (ícone);
fsd.setScale (escala);
ícone = dr;
scale = getNormalizer (). getScale (ícone, outIconBounds, nulo, nulo);
((ColorDrawable) dr.getBackground ()) .setColor (mWrapperBackgroundColor);
}
} outro {
Limite o número de espaços de trabalho
- Caminho: om.android.launcher3.config.BaseFlags
público estático final int WORKSPACE_SCREEN_SIZE_MAX = 3;
- Caminho: com.android.launcher3.Workspace # addExtraEmptyScreenOnDrag
public void addExtraEmptyScreenOnDrag () {
...
// limitar o tamanho do espaço de trabalho
if (FeatureFlags.CUSTOM_REMOVE) {
if (mWorkspaceScreens.size ()> = FeatureFlags.WORKSPACE_SCREEN_SIZE_MAX) {
Retorna;
}
}
...
}
Remova o ícone do APP e mantenha pressionado o menu pop-up
Caminho: com.android.launcher3.Workspace # beginDragShared
public DragView beginDragShared (Ver filho, fonte DragSource, ItemInfo dragObject,
DragPreviewProvider previewProvider, DragOptions dragOptions) {
...
if (child.getParent () instanceof ShortcutAndWidgetContainer) {
mDragSourceInternal = (ShortcutAndWidgetContainer) child.getParent ();
}
if ( ! FeatureFlags.CUSTOM_REMOVE && instância filha de BubbleTextView &&! dragOptions.isAccessibleDrag) {
PopupContainerWithArrow popupContainer = PopupContainerWithArrow
.showForIcon ((BubbleTextView) filho);
...
}
Modificação do indicador de página
- Configuração
Caminho: values / dimens.xml
<dimen name = "dynamic_grid_page_indicator_line_height"> 5dp </dimen>指示器 高度
largura do indicador de <dimen name = "dynamic_grid_page_indicator_line_width"> 70 dp </dimen> (novo)
<dimen name = "dynamic_grid_page_indicator_line_space"> intervalo do indicador de 16 dp </dimen> (novo)
- Caminho: com.android.launcher3.pageindicators.WorkspacePageIndicator # onDraw
Modifique o desenho no onDraw
- Modificado para não ocultar automaticamente
Caminho: com.android.launcher3.pageindicators.WorkspacePageIndicator # setScroll
if (! FeatureFlags.CUSTOM_REMOVE) {
animateLineToAlpha (mActiveAlpha);
}
Modificar espaço de trabalho pressione e segure para exibir as configurações de papel de parede
Caminho: com.android.launcher3.touch.WorkspaceTouchListener # run
@Sobrepor
public void run () {
if (mLongPressState == STATE_REQUESTED) {
if (canHandleLongPress ()) {
mLongPressState = STATE_PENDING_PARENT_INFORM;
mWorkspace.getParent (). requestDisallowInterceptTouchEvent (true);
mWorkspace.performHapticFeedback (HapticFeedbackConstants.LONG_PRESS,
HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
mLauncher.getUserEventDispatcher (). logActionOnContainer (Action.Touch.LONGPRESS,
Action.Direction.NONE, ContainerType.WORKSPACE,
mWorkspace.getCurrentPage ());
if (FeatureFlags.CUSTOM_REMOVE) {
OptionsPopupView.startWallpaperPicker (mLauncher.getRootView ());
}outro {
OptionsPopupView.showDefaultOptions (mLauncher, mTouchDownPoint.x, mTouchDownPoint.y);
}
} outro {
cancelLongPress ();
}
}
}
Remova a caixa de pesquisa da página inicial e o botão allapps
Caminho : com.android.launcher3.config.BaseFlags
// Sinalizador de recurso para permitir mover o QSB na tela 0 da área de trabalho.
public static final boolean QSB_ON_FIRST_SCREEN = false ;
// Quando ativado, o ícone de todos os aplicativos não é adicionado ao hotseat.
public static final boolean NO_ALL_APPS_ICON = true ;
Modificar transparência de fundo de AllApps
- Caminho : com.android.launcher3.views.ScrimView # ScrimView
public ScrimView (contexto de contexto, AttributeSet attrs) {
super (contexto, atrs);
...
// Totalmente transparente
mMaxScrimAlpha = 0; // 0.7f;
...
}
- Caminho: values / styles.xml
Correspondendo a allAppsScrimColor sob o tema
<item name = "allAppsScrimColor"> # 00000000 </item>