Настройка текста таким образом выиграл» т, потому что android:text
не применим к тегу <include>
. Более конкретно, это не относится к включенной вещи, которая является RelativeLayout
. (Вы не могли бы поставить android:text
на RelativeLayout
и он применяется к TextView
, ни вы бы ожидать, что к работе.)
Мое первое предложение (и самый простой безотлагательного решения) является использование TextView
«S построен в поддержка составных чертежей, чтобы вы могли просто использовать TextView
s вместо include
и иметь ресурс стиля для нужных вам атрибутов.
Если это не подходит для вашего случая использования, вам может потребоваться создать пользовательский вид. Этот вид заменит RelativeLayout
и будет TextView
и ImageView
в качестве детей. Главное, чтобы решить, где и как создаются дети и их ссылки: вы можете создавать их вручную на Java, когда родитель строится; или вы можете использовать некоторую комбинацию макетов с <include>
s и/или <merge>
s. При создании текстового атрибута требуется некоторое использование <declare-styleable>
.
Я предполагаю, что вы хотите, чтобы дети всегда отображались одинаково, и что вы хотите повторно использовать макет, который вы уже сделали (т. Е. Вы не хотите устанавливать все атрибуты вручную), так что это то, что я, вероятно, сделаю:
public class MyButton extends RelativeLayout {
private TextView mTextView;
private ImageView mImageView;
public MyButton(Context context) {
super(context);
init(context, null);
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
public MyButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context, attrs);
}
private void init(Context context, AttributeSet attributeSet) {
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.my_button, this, true); // used with merge tag
mTextView = (TextView) findViewById(R.id.text);
mImageView = (ImageView) findViewById(R.id.image);
int[] attrs = {android.R.attr.text};
TypedArray a = context.obtainStyleAttributes(attributeSet, attrs);
String text = a.getString(0, null);
mTextView.setText(text);
a.recycle();
}
}
В res/layout/my_button.xml
:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:layout_marginTop="13dp"
android:textSize="20dp"
android:text="CHANGE ME"
android:id="@+id/text" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginRight="25dp"
android:layout_alignParentRight="true"
android:src="@drawable/left"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:maxHeight="30dp"
android:maxWidth="30dp"/>
</merge>
В макете деятельности:
...
<!-- no more include -->
<com.package.MyButton
android:id="@+id/something"
android:layout_width="..."
android:layout_height="..."
android:text="..." />
<!-- you can have multiple instances with different IDs -->
<com.package.MyButton
android:id="@+id/something_else"
android:layout_width="..."
android:layout_height="..."
android:text="..." />
...
Вы также можете использовать свой собственный <declare-styleable>
для пользовательского представления, которое будет необходимо, если в дальнейшем вы захотите иметь пользовательские XML-атрибуты для него, но этого подхода должно быть достаточно.
Когда у меня есть несколько экземпляров этого макета в одном действии, как я могу различать их? – Nathan
выглядит как плохая практика, добавляя несколько одинаковых макетов в один вид деятельности. Попробуйте что-нибудь еще. Например, добавьте кнопки programmaticaly и сохраните их в массиве. Вам лучше описать задачу, которую вы хотите заполнить, добавив несколько макетов, возможно, кто-нибудь даст вам советы, как справиться с этим правильно. –
Его предназначение - это настраиваемый вид. Если мы можем использовать '