import React, { useState } from 'react'; import { ScrollView, View } from 'react-native'; import { Button, Modal } from '@xrnjs/ui'; import Card from '_global/Card'; import styles from './style'; /** * 自动布局测试 * 该文件用于测试 Modal 按钮的自动布局功能 * 规则:计算单个按钮的宽度(文本宽度 + padding),如果超过最大可用宽度,则使用纵向(column)布局 * 最大可用宽度: * - 两个按钮时:(footerWidth - spacing) / 2 * - 单个按钮时:footerWidth * 实现: * 1. 使用 onTextLayout 事件的 event.nativeEvent.lines[0].width 获取文本实际渲染宽度 * 2. 使用 onLayout 事件获取 footer 容器的实际宽度 * 3. 比较单个按钮宽度与最大可用宽度 */ const AutoLayoutExample = () => { const [visible1, setVisible1] = useState(false); const [visible2, setVisible2] = useState(false); const [visible3, setVisible3] = useState(false); const [visible4, setVisible4] = useState(false); const [visible5, setVisible5] = useState(false); const [visible6, setVisible6] = useState(false); return ( {/* 短文本 - 应该自动使用横向布局 */} setVisible1(false)} onPressCancel={() => setVisible1(false)} solidButton // 不指定 buttonsDirection,让其自动计算 onClose={() => setVisible1(false)} /> {/* 长文本 - 应该自动使用纵向布局 */} setVisible2(false)} onPressCancel={() => setVisible2(false)} solidButton // 不指定 buttonsDirection,让其自动计算 onClose={() => setVisible2(false)} /> {/* 中等长度文本 - 边界情况 */} setVisible3(false)} onPressCancel={() => setVisible3(false)} solidButton onClose={() => setVisible3(false)} /> {/* 单个按钮 */} setVisible4(false)} solidButton onClose={() => setVisible4(false)} /> {/* 极长文本 - 确保触发纵向布局 */} setVisible6(false)} onPressCancel={() => setVisible6(false)} solidButton onClose={() => setVisible6(false)} /> {/* 手动指定 buttonsDirection - 覆盖自动计算 */} setVisible5(false)} onPressCancel={() => setVisible5(false)} solidButton buttonsDirection="column" // 手动指定纵向布局 onClose={() => setVisible5(false)} /> ); }; export default AutoLayoutExample;