DANFA

Kotlin: Различия между stringResource() и getString()

При разработке приложений на Android с использованием Jetpack Compose и стандартных подходов на основе Activity/Fragments вы можете столкнуться с двумя разными способами получения строковых ресурсов: функцией stringResource() и методом getString(). Оба способа служат схожей цели — получают строку из ресурсов проекта, однако имеют разное назначение и области применения.

Функционал и различия



stringResource()
  • Назначение: Используется в рамках композиции Composable-функций Jetpack Compose.
  • Где применяется: Только внутри функций с аннотацией @Composable.
  • Формат: Выглядит как простая функция, принимающая ID ресурса: stringResource(R.string.your_string_id).
  • Импорт: Необходимо подключить следующий импорт:
    import androidx.compose.ui.res.stringResource

Пример использования:
@Composable
fun MyScreen() {
    Text(text = stringResource(R.string.welcome_message))
}

getString()
  • Назначение: Применяется вне контекста Compose-композиций, например, в обычных Activity, Fragment или ViewModels.
  • Где применяется: Внутри классов наследников от Context, AppCompatActivity, Fragments и других компонент, поддерживающих ресурсный контекст.
  • Формат: Методы getString() относятся непосредственно к объекту контекста, например: context.getString(R.string.your_string_id) или activity.getString(R.string.your_string_id).
  • Импорт: Стандартный импорт ресурсов не нужен, поскольку метод доступен напрямую в классе Context и производных от него объектах.

Пример использования:
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val welcomeMessage = getString(R.string.welcome_message)
        Toast.makeText(this, welcomeMessage, Toast.LENGTH_SHORT).show()
    }
}

Заключение
Подводя итог, запомните простое правило:
  • Если ваша задача связана с Jetpack Compose и находится внутри блока @Composable, используйте stringResource().
  • Если же вы работаете с обычным проектом Android (Activity, Fragment, ViewModel и прочими компонентами), применяйте стандартный метод getString().

Это разделение позволяет сделать ваш код чистым и организованным, соблюдая принцип разделения ответственности между функциональностью Compose и традиционными механизмами Android-разработки.

Автор:  24.02.2026 07:31:31 am