Edit a View (TextView / ImageView) inside a layout used in <include> tag using custom attribute
Я новичок в разработке Android.
Is it possible to change a View inside an included layout using custom attribute?
Я имею в виду, как это:
Это my_layout
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listItem"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/userImage"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="..." />
<!-- this src attribute can be overrided using my own attribute in the iclude tage -->
<TextView
android:id="@+id/userName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="..." />
<!-- this text attribute can be overrided using my own attribute in the iclude tage -->
</LinearLayout>
and this is how I want to include my_layout
to the activity layout:
<include layout="@layout/my_layout" userName="@string/userName1" userImage="@drawable/userImage1"/>
userName
а также userImage
override the value of android:text
а также android:src
приписывать.
I have read about Data Binding but what I mean here is not using any Java class. I just need to define a variable into data tag in my_layout
с type
value referenced to @string/
или же @drawable/
to get a text or picture.
Является ли это возможным?
2 ответа
Как ваше описание, вы хотите опубликовать userName1
а также userImage1
Посмотреть в my_layout
, Вы не можете сделать это. И то, как вы используете пользовательский вид, неверно. Тег 'include' также не является пользовательским тегом.
Вы можете использовать пользовательский атрибут, следуя этому примеру:
<com.amscf.view.InviteItemView
android:id="@+id/invite_item_instagram"
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="@drawable/item_color"
android:paddingBottom="10dp"
android:paddingTop="10dp"
app:appicon="@drawable/icon_app_instagram"
app:btntext=""
app:coindesc="Post a invitation"
app:cointext="Share to Instagram"
app:showweek="false"/>
В представлении InviteItemView
вы можете получить attibute appIcon
, btnText
с кодом ниже:
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.invite_item_view);
int refId = typedArray.getResourceId(R.styleable.invite_item_view_appicon, R.mipmap.ic_launcher);
String btnText = typedArray.getString(R.styleable.invite_item_view_btntext);
refId
а также btnText
это то, что вы получите.
Добавьте приведенный ниже код к вашему attrs.xml
это определение invite_item_view
<declare-styleable name="invite_item_view">
<attr name="appicon" format="reference"/>
<attr name="cointext" format="string"/>
<attr name="coindesc" format="string"/>
<attr name="btntext" format="string"/>
<attr name="showweek" format="boolean"/>
</declare-styleable>
<inlcude />
тег поможет вам повторно использовать макет, который отличается на разных страницах. Одним из примеров является определение пользовательской панели инструментов и ее повторное использование в действиях, фрагмент.
В настоящее время вы можете добавить этот пользовательский тег, как вы упомянули, но вместо этого вы можете сразу объявить в коде, просто без DataBinding:
Например, с этим toolbar.xml
:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay">
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/colorWhite" />
</android.support.v7.widget.Toolbar>
И в activity_main.xml
, у тебя есть:
<include layout="@layout/toolbar"/>
В MainActivity.java
Вы можете определить это:
private TextView title = (TextView) findViewById(R.id.toolbar_title);
title.setText("Whatever you want");