I. System Popup Classification
1.1 Modal Dialogs (Strong Interaction)
1.1.1 Dialog
Features: Full-screen overlay, blocks all underlying interactions
Use Cases: Critical operations confirmation (delete/exit), form submission
Official Example:
// Show confirmation dialog promptAction.showDialog({ title: 'Delete Confirmation', message: 'Are you sure to delete this file?', buttons: [Text('Cancel'), Text('Confirm')] });
Advantages: Clear interaction flow
Limitations: Frequent use degrades user experience
1.1.2 Action Menu
Features: Bottom-aligned list with multiple options
Use Cases: Feature selection (share/settings)
Implementation:
promptAction.showActionMenu({ title: 'Select Action', buttons: [Text('Share'), Text('Save')] });
Advantages: Quick access to key functions
Limitations: Max 5 options before pagination required
1.2 Non-modal Dialogs (Weak Interaction)
1.2.1 Loading Dialog
Features: Auto-centered with progress animation
Use Cases: Network requests, data processing
Usage:
// Show loading loadingDialog.show({ message: 'Saving...' }); // Hide loadingDialog.hide();
Advantages: Unified loading state management
Limitations: No custom animation support
1.2.2 Tooltip
Features: Anchor-based positioning, auto-aligns to components
Use Cases: Icon explanations, operation guides
Implementation:
@Component struct Tooltip { build() { Popup() { Text('Click to save changes') } .target(anchorRef) .placement(Placement.Bottom) } }
Advantages: Precise contextual guidance
Limitations: Fixed display duration
II. Advanced Implementation
2.1 Navigation Dialog
Features: Page-routing based with transparent background
Configuration:
@Entry @Component struct MainView { build() { NavDestination() { Column() { Button("Show Dialog") .onClick(() => this.showDialog()) } .mode(NavDestinationMode.DIALOG) } } }
Use Cases: Form filling, image preview
Key Consideration: Back button handling required
2.2 Global Overlay
- Implementation:
// Create global overlay const overlay = OverlayManager.createComponent( new ComponentContent().setComponent(alertComponent) ); overlay.show();
Typical Applications: Floating customer service buttons
Limitations: Manual lifecycle management
III. Best Practices
3.1 Design Specifications
Type | Max Duration | Min Trigger Distance | Animation Duration |
---|---|---|---|
Dialog | Unlimited | 0 | 300ms |
Loading | 30s | - | 200ms |
Tooltip | 5s | 48dp | 250ms |
3.2 Performance Optimization
Memory: Call dispose() promptly
Rendering: Enable willMount preloading for complex dialogs
Animations: Prefer system-native animations
3.3 Common Scenarios
Scenario 1: Form Validation
TextInput() .onChange((text) => { if(text.length < 6) formValidator.showWarning('Minimum 6 characters'); });
Scenario 2: Multi-step Guide
@State currentStep = 0; build() { Stack() { MainContent() if(currentStep === 1) { GuideOverlay() .content("Click top-right to complete") .onClose(() => currentStep = 2); } } }
IV. Key Considerations
Permissions: System dialogs don't require special permissions. Custom dialogs need ohos.permission.SYSTEM_ALERT_WINDOW
Style Consistency: Use @style for global theming:
@style GlobalDialogStyle { backgroundColor: Color.Transparent; borderRadius: 8; }
Accessibility: Mandatory accessibilityLabel property
Lifecycle: Avoid showing dialogs in onInit
Top comments (0)