Чӣ гуна ба тамошои фармоишӣ дар Android хусусиятҳои фармоишӣ илова кардан мумкин аст؟
sobes.tech AI
Ҷавоб аз AI
-
Тафтиши атрибутҳо дар
attrs.xml: Файлres/values/attrs.xml(ё ба файли мавҷуда илова кардан) эҷод мешавад. Дар он<declare-styleable>бо номи View-и махсуси худ муайян карда мешавад ва<attr>барои ҳар як атрибути истифодашаванда рӯйхат мешавад, ки формати онҳо (format) нишон дода мешавад.<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyCustomView"> <attr name="customText" format="string"/> <attr name="customColor" format="color"/> <attr name="customEnabled" format="boolean"/> </declare-styleable> </resources> -
Истифодаи атрибутҳо дар XML: Дар лоиҳаи XML, ки дар он View-и махсус истифода мешавад, атрибутҳои муайяншуда бо истифода аз фазои номҳои
appилова карда мешаванд.<com.example.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" app:customText="Hello Custom View" app:customColor="@color/colorPrimary" app:customEnabled="true"/> -
Хондани атрибутҳо дар коди View: Дар конструктори View-и махсус (одатан дар он, ки
ContextваAttributeSetмегирад), аз классҳоиTypedArrayваobtainStyledAttributesбарои хондани арзишҳои атрибутҳо, ки дар XML нишон дода шудаанд, истифода мешавад.class MyCustomView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { // Мисолҳо барои нигоҳ доштани арзишҳои атрибутҳо private var customText: String? = null private var customColor: Int = 0 private var customEnabled: Boolean = false init { // Гирифтани TypedArray бо атрибутҳо val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0) try { // Хондани арзишҳои атрибутҳо customText = typedArray.getString(R.styleable.MyCustomView_customText) customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Арзиши пешфарз customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Арзиши пешфарз // Ҳоло метавонед customText, customColor ва customEnabled-ро барои танзим кардани View истифода баред // Масалан: // if (customEnabled) { /* ... */ } } finally { // Муҳим! Рециклинг кардани TypedArray барои озод кардани захираҳо typedArray.recycle() } } // ... дигар логикаи View ... }
Методи obtainStyledAttributes TypedArray-ро бармегардонад, ки аз он метавон арзишҳои атрибутҳоро бароварда, истифода кард. Пас аз истифода, бояд recycle()-ро барои озод кардани захираҳо фаро гирифт.