Corner radius — a UI-elemek sarkainak lekerekítési paramétere, amelyet logikai képpontokban (iOS-en pt, Androidon dp) mérünk, és meghatározza a téglalap sarkába írt kör sugarát. A corner radius helyes megválasztása befolyásolja a felület érzékelését: a nagy lekerekítések lágy, barátságos hangulatot teremtenek, a kicsik — szigorú és formális hatást. A Material Design Guidelines (Google, 2026) szerint az ajánlott radius kártyákhoz 8–16 dp, gombokhoz — 4–8 dp. Az elemek megjelenésének kezeléséről bővebben a UI árnyékairól szóló cikkben olvashat.
Főbb pontok
Corner radius — egy numerikus érték, amely meghatározza a téglalap alakú elem sarkainak lekerekítési fokát. Minél magasabb az érték, annál kerekebbé válik a sarok. 0 értéknél a sarok egyenes marad (90°), a rövidebb oldal felével egyenlő értéknél az elem körré (négyzet esetén) vagy lekerekített téglalappá egyenes oldalakkal (kapszulává) alakul.
A mobil dizájnban a corner radius a következőkhöz használatos: kártyák és csempék, gombok, beviteli mezők, modális ablakok, képek és avatárok, folyamatjelzők, chipek és jelvények. Minden elemtípusnak van ajánlott tartománya a lekerekítésre, a Material Design és a Human Interface Guidelines alapján.
A Material Design 3 (Google, 2026) szerint a sarkok lekerekítése három szintre osztható: small (4 dp) gombokhoz és beviteli mezőkhöz, medium (8–12 dp) kártyákhoz és lapokhoz, large (16–28 dp) párbeszédablakokhoz és bottom sheet-ekhez. HIG Apple (2025) egységes 10–12 pt corner radius-t ajánl a rendszerelemekhez (UIButton, UITextField) és 20+ pt-t a modális prezentációkhoz.
iOS-en a sarkok lekerekítése a CALayer cornerRadius tulajdonságán keresztül valósul meg. UIKit-ben minden UIView rendelkezik egy réteggel, amelyen beállítható a cornerRadius. Összetettebb lekerekítésekhez (különböző sugarak a különböző sarkokhoz) a maskedCorners és CACornerMask használatos UIBezierPath kombinációjával.
// UIKit: lekerekítés CALayer segítségével
import UIKit
let cardView = UIView()
cardView.backgroundColor = .systemBackground
cardView.layer.cornerRadius = 12
cardView.layer.maskedCorners = [
.layerMinXMinYCorner,
.layerMaxXMinYCorner
]
SwiftUI-ban a lekerekítés a cornerRadius() módosítóval vagy a ClipShape segítségével RoundedRectangle-val állítható be. A SwiftUI támogatja az egyedi saroklekerekítést is az UIRectCorner segítségével a clipped() és overlay() kombinációjával.
// SwiftUI: lekerekítés RoundedRectangle segítségével
import SwiftUI
VStack {
Text("Sarok sugara 16")
.padding()
.background(
RoundedRectangle(cornerRadius: 16)
.fill(Color.blue)
)
}
// Egyedi saroklekerekítés
RoundedRectangle(
cornerSize: CGSize(width: 16, height: 16),
style: .continuous
)
Continuous corner radius — az Apple által iOS 7 óta használt lekerekítési stílus iOS-en. Ellentétben a klasszikus sugárral (circular), a continuous radius simább lekerekítést hoz létre egy harmadrendű Bezier-görbe használatával a körív helyett. A SwiftUI ezt a stílust a style: .continuous paraméterrel támogatja a RoundedRectangle-ban. Az Apple a continuous corner radius-t ajánlja minden rendszerelemhez, mivel vizuálisan természetesebb.
Androidon a sarkok lekerekítése hagyományosan XML shape erőforrásokon keresztül valósul meg a res/drawable mappában. A shape meghatározza a háttér alakját a cornerRadius és solid paraméterekkel. Különböző sarkokhoz a <, bottom, top és <right használatos. A Material Design 3-ban hozzáadták a MaterialShapeDrawable-t témák és dinamikus formák támogatásával.
<!-- res/drawable/bg_card.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<corners android:radius="12dp" />
</shape>
Jetpack Compose-ban a lekerekítés a Modifier shape paraméterén keresztül állítható be. A Compose RoundedCornerShape-t biztosít különböző sugarak támogatásával minden sarokhoz és stílushoz (CircularShape vagy CutCornerShape). A Compose a continuous corner radius-t is támogatja a RoundedCornerShape segítségével grafikus kontúr kombinációjával.
// Jetpack Compose: lekerekítés RoundedCornerShape segítségével
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
Card(
shape = RoundedCornerShape(
topStart = 16.dp,
topEnd = 16.dp,
bottomStart = 4.dp,
bottomEnd = 4.dp
),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
Text(text = "Kártya egyedi lekerekítéssel")
}
MaterialShapeDrawable az Android View System-ben lehetővé teszi a corner radius dinamikus megváltoztatását a drawable újraalkotása nélkül. Használja a ShapeAppearanceModel-t a pontos konfigurációhoz: állítsa be a cornerFamily-t (rounded vagy cut) és a cornerSize-t minden sarokhoz külön-külön.
A corner radius kiválasztása függ az elem típusától, a használati kontextustól és a platformtól. Nincs univerzális szabály, de a Material Design és a HIG Apple egyértelmű ajánlásokat ad a standard komponensekhez. Az alapelv: a lekerekítés legyen észrevehető, de ne zavarja a tartalmat.
| Elem típusa | Ajánlott radius | Platform | Megjegyzés |
|---|---|---|---|
| Gombok | 4–8 dp / 8 pt | iOS, Android | Minél nagyobb a gomb, annál nagyobb a radius |
| Kártyák | 8–16 dp / 10–12 pt | iOS, Android | Material Design: alapértelmezett 12 dp |
| Beviteli mezők | 4–8 dp / 8 pt | iOS, Android | A túl nagy lekerekítés természetellenesnek tűnik |
| Modális ablakok | 16–28 dp / 20+ pt | iOS, Android | iOS 18: alapértelmezett 24 pt |
| Avatárok | A méret 50%-a | iOS, Android | Kerek avatárokhoz radius = az oldal fele |
| Chip-ek / Jelvények | 16–20 dp / 14 pt | Android | Kapszula forma nagy lekerekítésnél |
Kontraszt szabálya: az eltérő corner radius-szal rendelkező elemeknek egy felületen legalább 4 dp-vel kell különbözniük, hogy a vizuális különbség észrevehető legyen. Ne használjon 3 lekerekítési szintet egy képernyőn — ez vizuális zajt teremt. A Material Design 3 legfeljebb két lekerekítési szint használatát ajánlja képernyőnként: egyet a konténerekhez (kártyák, párbeszédablakok) és egyet az interaktív elemekhez (gombok, mezők).
Flutter-ben a sarkok lekerekítése a BorderRadius osztályon keresztül valósul meg, amely Radius.circular() vagy Radius.elliptical() értékeket fogad. A Flutter támogatja az egyedi lekerekítést a BorderRadius.only() és BorderRadius.horizontal()/vertical() segítségével. A ClipRRect widget a megadott BorderRadius szerint vágja ki a gyermekelemet.
// Flutter: lekerekítés ClipRRect és Container segítségével
import 'package:flutter/material.dart';
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16.0),
topRight: Radius.circular(16.0),
bottomLeft: Radius.circular(4.0),
bottomRight: Radius.circular(4.0),
),
),
child: Text('Egyedi saroklekerekítés'),
)
// ClipRRect Image-tel
ClipRRect(
borderRadius: BorderRadius.circular(12.0),
child: Image.network(
'https://example.com/image.jpg',
fit: BoxFit.cover,
),
)
ClipRRect Flutter-ben akkor használatos, amikor egy képet vagy összetett widgetet kell lekerekített határ mentén kivágni. Egyszerű háttérkonténerekhez elegendő a BoxDecoration borderRadius-szal — ez hatékonyabb, mert nem hoz létre külön vágó réteget. A Material Flutter 3.22+ támogatja a continuous corner radius-t a ContinuousRectangleBorder segítségével.
Gyakran ismételt kérdések
dp (density-independent pixels) Androidon és pt (points) iOS-en — logikai egységek, amelyek a képernyőn lévő fizikai méretnek felelnek meg a pixelsűrűségtől függetlenül. 1 dp ≈ 1 pt ≈ 1/160 hüvelyk. A corner radius dp és pt numerikus értékei felcserélhetőként használhatók a dizájn platformok közötti átvitelénél.
iOS-en használja a maskedCorners tulajdonságot CACornerMask-val: layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]. Android XML-ben — . Jetpack Compose-ban — RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp). Flutter-ben — BorderRadius.only(topLeft: Radius.circular(12), topRight: Radius.circular(12)).
Continuous corner radius — egy lekerekítési stílus, ahol a sarok nem körív, hanem egy harmadrendű Bezier-görbe mentén alakul ki. Az Apple ezt a stílust iOS 7 óta használja minden rendszerelemhez. Vizuálisan a continuous lekerekítés simábbnak és természetesebbnek tűnik a klasszikus circular stílushoz képest.
Ajánlott 10–12 pt iOS-en (mint a rendszerbillentyűzet) és 8–12 dp Androidon. A billentyűzeten belüli gombok lehetnek kisebb radius-szal (4–6 dp) vagy lekerekítés nélkül. Az érintési terület növeléséhez használjon 4–8 dp padding-et a lekerekített határ és a gomb széle között.
A UITableViewCell nem örökli automatikusan a cornerRadius-t a contentView-től, mivel a cella háttere a backgroundView-ben rajzolódik ki. A cella lekerekítéséhez állítsa be a cornerRadius tulajdonságot a contentView.layer és a backgroundView.layer számára egyidejűleg. SwiftUI-ban használja a .listRowBackground() metódust RoundedRectangle-val.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is