我在android布局中遇到问题,我不知道这是什么问题。 实际上,我想更改图像旁边文本的字体。 当我没有在xml代码中的textViews中放入任何文本,而是在Java代码中设置了文本并设置了字体时,我遇到了这个问题。
这是我的 group_view_two_4_first_activity.xml 文件:
<android.support.v7.widget.CardView
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:cardCornerRadius="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/sport_complex_name"
app:layout_constraintTop_toTopOf="@+id/sport_complex_name">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/field" />
</android.support.v7.widget.CardView>
<TextView
android:id="@+id/sport_complex_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:textColor="#565657"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/hallNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="#7E7E7F"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="@+id/sport_complex_name"
app:layout_constraintTop_toBottomOf="@+id/sport_complex_name" />
<TextView
android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#7E7E7F"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/hallNumber"
app:layout_constraintEnd_toStartOf="@+id/hallNumber"
app:layout_constraintTop_toTopOf="@+id/hallNumber" />
</android.support.constraint.ConstraintLayout>
这是它的java文件: GroupViewTwo4FirstActivity
public class GroupViewTwo4FirstActivity extends ConstraintLayout {
View rootView;
TextView sportComplexName;
TextView hallNumber;
TextView number;
String txtNo;
String complexName;
public GroupViewTwo4FirstActivity(Context context) {
super(context);
init(context);
}
public GroupViewTwo4FirstActivity(Context context, AttributeSet attrs) {
this(context, attrs, 0);
init(context);
}
public GroupViewTwo4FirstActivity(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.GroupViewTwo4FirstActivity, defStyleAttr, 0);
txtNo = ta.getString(R.styleable.GroupViewTwo4FirstActivity_hallNo);
complexName = ta.getString(R.styleable.GroupViewTwo4FirstActivity_complex_name);
ta.recycle();
init(context);
}
private void init(Context context) {
rootView = inflate(context, R.layout.group_view_two_4_first_activity, this);
Typeface typeface = EnglishToPersian.createTypeFace1(context);
sportComplexName = rootView.findViewById(R.id.sport_complex_name);
hallNumber = rootView.findViewById(R.id.hallNumber);
number = rootView.findViewById(R.id.number);
sportComplexName.setTypeface(typeface);
hallNumber.setTypeface(typeface);
number.setTypeface(typeface);
number.setText(EnglishToPersian.englishToPersian(txtNo));
hallNumber.setText("سالن شماره ");
sportComplexName.setText("مجتمع ورزشی افق لاله");
}
}
答案 0 :(得分:1)
从xml膨胀时被调用的构造函数是这样的:
public GroupViewTwo4FirstActivity(Context context, AttributeSet attrs) {
this(context, attrs, 0);
init(context);
}
this(context,attrs,0)
调用您的第三个构造函数,此后构造函数同时调用init(context)
,然后又调用init(context)
,因此您要执行两次。
按以下方式定义构造函数可确保您的init
方法每次都被调用一次。
public GroupViewTwo4FirstActivity(Context context) {
this(context, null);
}
public GroupViewTwo4FirstActivity(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public GroupViewTwo4FirstActivity(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.GroupViewTwo4FirstActivity, defStyleAttr, 0);
txtNo = ta.getString(R.styleable.GroupViewTwo4FirstActivity_hallNo);
complexName = ta.getString(R.styleable.GroupViewTwo4FirstActivity_complex_name);
ta.recycle();
init(context);
}
希望有帮助!