Dimensões Responsivas Inteligentes para Qualquer Tela
📚 Documentação | ⚡ Referência Rápida | 🔬 Detalhes Técnicos
🎯 13 Estratégias de Escalonamento (eram apenas 2!)
- BALANCED ⭐ Nova estratégia primária recomendada - híbrida linear-logarítmica
- DEFAULT (antiga Fixed) - logarítmica com compensação de AR (recomendação secundária)
- PERCENTAGE (antiga Dynamic) - escalonamento proporcional
- LOGARITHMIC - psicofísica pura de Weber-Fechner
- POWER - Lei de Potência de Stevens (configurável)
- FLUID - Similar ao CSS clamp com breakpoints
- Mais 7: INTERPOLATED, DIAGONAL, PERIMETER, FIT, FILL, AUTOSIZE 🆕, NONE
🧠 Sistema de Inferência Inteligente
- Seleção automática de estratégia baseada no tipo de elemento
- 18 tipos de elemento (BUTTON, TEXT, ICON, CONTAINER, etc.)
- 8 categorias de dispositivo (PHONE_SMALL até TV)
- Sistema de decisão baseado em pesos
⚡ Melhoria de Performance de 5x
- Cache unificado lock-free (0.001µs)
- Tabela de lookup para ln() (10-20x mais rápido)
- Constantes pré-calculadas
- Algoritmos de busca binária (O(log n))
♻️ Compatibilidade entre artefatos
- Pacotes antigos podem ainda expor
.fxdp/.dydp— confira o changelog da dependência que você usa - Para Android Compose novo, siga o
appdimens-dynamic3.x (sdp,asdp, …); veja PLATFORM_API_MAP.md (inglês)
AppDimens faz seus elementos de UI escalonarem perfeitamente em todos os dispositivos - de telefones a tablets, TVs, relógios e navegadores web.
Em vez de tamanhos fixos que parecem minúsculos em tablets ou enormes em relógios, AppDimens usa escalonamento perceptual baseado em pesquisa psicofísica (Weber-Fechner, Stevens) que adapta inteligentemente ao tamanho da tela, proporção e tipo de dispositivo.
❌ Sem AppDimens:
Telefone (360dp): Botão = 48dp (13% da tela) ✅ Bom
Tablet (720dp): Botão = 48dp (7% da tela) ❌ Muito pequeno!
❌ Com Escalonamento Linear (SDP):
Telefone (360dp): Botão = 58dp (16% da tela) ✅ OK
Tablet (720dp): Botão = 115dp (16% da tela) ❌ Muito grande!
✅ Com AppDimens BALANCED ⭐:
Telefone (360dp): Botão = 58dp (16% da tela) ✅ Perfeito
Tablet (720dp): Botão = 70dp (10% da tela) ✅ Perfeito!
- ✅ Proporções perfeitas em qualquer tamanho de tela
- ✅ Funciona em todo lugar: Android, iOS, Flutter, React Native, Web
- ✅ API por plataforma: tokens
sdp/asdpno Android Compose;balanced()no iOS/Web/RN;AppDimens.fixed/dynamicno Flutter - ✅ Cientificamente comprovado: Baseado em pesquisa psicofísica (Weber-Fechner, Stevens)
- ✅ Melhor performance: 5x mais rápido com cache lock-free e otimizações
- ✅ 13 estratégias: Do simples ao avançado, cobrindo todos os casos de uso
- ✅ Inferência Inteligente: Seleção automática de estratégia para 18 tipos de elemento
- ✅ Unidades físicas: Medidas do mundo real (mm, cm, polegadas) em todas as plataformas
- ✅ Desenvolvimento de jogos: Módulos especializados para Android (C++/NDK) e iOS (Metal)
- ✅ AutoSize 🆕: Auto-dimensionamento com consciência de container como TextView autoSizeText
dependencies {
implementation("io.github.bodenberg:appdimens-dynamic:2.0.1")
implementation("io.github.bodenberg:appdimens-sdps:2.0.1")
implementation("io.github.bodenberg:appdimens-ssps:2.0.1")
implementation("io.github.bodenberg:appdimens-all:2.0.1")
implementation("io.github.bodenberg:appdimens-games:2.0.1")
}pod 'AppDimens', '~> 2.0.0'dependencies:
appdimens: ^2.0.0npm install appdimens-react-native@2.0.0npm install webdimens@2.0.0@Composable
fun MeuCard() {
Card(
modifier = Modifier
.width(300.wdp) // ✨ BALANCED (RECOMENDADO) ⭐
.padding(16.sdp)
) {
Text(
text = "Olá Mundo",
fontSize = 18.ssp
)
}
}struct MeuCard: View {
var body: some View {
VStack {
Text("Olá Mundo")
.font(.system(size: AppDimens.shared.balanced(18).toPoints()))
}
.padding(AppDimens.shared.balanced(16).toPoints())
.frame(width: AppDimens.shared.balanced(300).toPoints())
}
}Widget build(BuildContext context) {
return Container(
width: AppDimens.fixed(300).calculate(context),
padding: EdgeInsets.all(AppDimens.fixed(16).calculate(context)),
child: Text(
'Olá Mundo',
style: TextStyle(fontSize: AppDimens.fixed(18).calculate(context)),
),
);
}{% raw %}
function MeuCard() {
const { balanced } = useAppDimens();
return (
<View style={{ width: balanced(300), padding: balanced(16) }}>
<Text style={{ fontSize: balanced(18) }}>
Olá Mundo
</Text>
</View>
);
}{% endraw %}
{% raw %}
import { useWebDimens } from 'webdimens/react';
function MeuCard() {
const { balanced } = useWebDimens();
return (
<div style={{ width: balanced(300), padding: balanced(16) }}>
<h2 style={{ fontSize: balanced(18) }}>Olá Mundo</h2>
</div>
);
}{% endraw %}
| Estratégia | Quando Usar | Exemplo | Disponibilidade |
|---|---|---|---|
| BALANCED ⭐ RECOMENDADO | 95% dos casos - apps multi-dispositivo (telefones, tablets, TVs) | 48.sdp |
Todas as plataformas |
| DEFAULT (Secundário) | Apps focados em telefones, ícones, compatibilidade | 48.sdp |
Todas as plataformas |
| PERCENTAGE | Containers grandes, grids de largura total, elementos proporcionais | Android Compose: 300.wdp (eixo de largura); iOS/Web/RN: percentage(...) nos builders |
Todas as plataformas |
| LOGARITHMIC | Apps de TV, controle máximo em telas grandes | 48.logarithmic() |
Todas as plataformas |
| POWER | Uso geral, configurável com expoente | 48.power(0.75) |
Todas as plataformas |
| FLUID 🌊 | Tipografia, espaçamento com transições suaves min/max | fluid(16, 24) |
Todas as plataformas |
📖 Entendendo as Estratégias de Escalonamento
AppDimens foi cientificamente comparado contra 7 outras abordagens de escalonamento:
🥇 #1 AppDimens BALANCED: 93/100 ⭐⭐⭐⭐⭐ (Recomendação primária)
🥈 #2 AppDimens LOGARITHMIC: 88/100 ⭐⭐⭐⭐⭐ (TV/Tablets grandes)
🥉 #3 AppDimens POWER: 86/100 ⭐⭐⭐⭐
#4 AppDimens DEFAULT: 82/100 ⭐⭐⭐⭐ (Focado em telefones)
#5 SDP/SSP: 65/100
#6 CSS vw/vh: 58/100
- ✅ Estratégia BALANCED: Híbrida linear-logarítmica (40% de redução de oversizing)
- ✅ Modelos perceptuais: Baseado em psicofísica (Weber-Fechner, Stevens)
- ✅ 13 estratégias: Biblioteca mais abrangente
- ✅ Inferência Inteligente: Seleção automática de estratégia
- ✅ 5x mais rápido: Cache lock-free e otimizações
- ✅ Compensação de aspect ratio: Única biblioteca com ajuste de AR (estratégia DEFAULT)
- Referência Rápida ⚡ Encontre qualquer coisa em segundos
- Guia Simplificado 📖 Entenda em 15 minutos
- Exemplos 💻 Código pronto para usar
- Guia Técnico Completo 🔬 Tudo em um lugar (2h de leitura)
- Comparação de Fórmulas 📊 Análise científica & rankings
- Teoria Matemática 📐 Fundação matemática formal
- 🤖 Guia Android
- 🍎 Guia iOS
- 🎯 Guia Flutter
- ⚛️ Guia React Native
- 🌐 Guia Web
📚 Índice Completo da Documentação
Contribuições são bem-vindas!
- 🐛 Reportar bugs
- 💡 Sugerir funcionalidades
- 📝 Melhorar documentação
- ⭐ Dar estrela neste repositório!
Apache License 2.0 - veja o arquivo LICENSE
Jean Bodenberg
- GitHub: @bodenberg
- Website: appdimens-project.web.app
Feito com ❤️ para desenvolvedores no mundo todo