Middle
Ako spojiť vlastný pohľad s vlastným rozložením?
sobes.tech AI
Odpoveď od AI
Existuje niekoľko spôsobov:
-
Použitie konštruktora s množinou atribútov
AttributeSet: Toto je najbežnejší spôsob. V konštruktore View môžete načítať atribúty z XML a použiť ich.public class MyCustomView extends View { public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); // Čítanie atribútov z attrs TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView); // Získanie hodnôt atribútov, napríklad: // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue); a.recycle(); // Je dôležité uvoľniť TypedArray // Inicializácia View na základe načítaných atribútov // ... } // ... ďalšie konštruktory a metódy }Pri definovaní vlastného layoutu v XML môžete použiť tieto atribúty:
<com.example.app.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" app:someAttribute="someValue" /> -
Inflácia layoutu vo vnútri View: Ak View pozostáva z viacerých ďalších View, môžu byť inflatované z samostatného XML súboru vo vnútri vlastného View.
public class MyCompositeView extends LinearLayout { public MyCompositeView(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.my_custom_layout, this, true); // Teraz môžete nájsť prvky vo vnútri my_custom_layout // TextView myTextView = findViewById(R.id.myTextView); // ... } // ... ďalšie konštruktory a metódy }my_custom_layout.xmlmôže vyzerať takto:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/myTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello Custom Layout!" /> <!-- ďalšie prvky rozloženia --> </LinearLayout>Tento vlastný layout
MyCompositeViewje možné použiť v inom XML súbore:<com.example.app.MyCompositeView android:layout_width="match_parent" android:layout_height="wrap_content" />
Voľba metódy závisí od zložitosti vlastného View: pre jednoduché View s minimálnym počtom prvkov postačuje prvý spôsob, pre zložitejšie View s vnútornou štruktúrou je vhodnejší druhý.