Я создал пользовательскую группу ViewGroup (DigitLayout.class), которая отображает данный текст в виде одометра, как показано на рисунке ниже:
Основной принцип пользовательской ViewGroup заключается в том, что когда метод setText(CharSequence text)
вызывается, RelativeLayout с дочерним TextView создается динамически для каждого символа и добавляется в пользовательскую ViewGroup.
Однако стилизациядочерние RelativeLayouts и TextViews в настоящее время жестко запрограммированы в методе setText(CharSequence text)
пользовательской ViewGroup:
public class DigitLayout extends LinearLayout {
// Constant for logging
private static final String TAG = DigitLayout.class.getSimpleName();
public DigitLayout(Context context) {
super(context);
}
public DigitLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public DigitLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public DigitLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public void setText(CharSequence text) {
// Clear existing value
clearText();
// Get the number of digits to display
int numberOfDigits = text.length();
for ( int i = 0; i < numberOfDigits; i++ ) {
RelativeLayout digitContainer = new RelativeLayout(getContext()); // Container for the TextView
LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(50,
ViewGroup.LayoutParams.WRAP_CONTENT);
linearParams.setMargins(5,0,5,0);
digitContainer.setLayoutParams(linearParams);
digitContainer.setBackground(getContext().getDrawable(R.drawable.bg));
// Create a TextView for the digit
TextView digitTextView;
digitTextView = new TextView(getContext());
digitTextView.setLayoutParams(new TableLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT,
1f
));
digitTextView.setGravity(Gravity.CENTER);
digitTextView.setTextSize(16f);
digitTextView.setTextColor(Color.WHITE);
digitTextView.setTypeface(Typeface.DEFAULT_BOLD);
digitTextView.setText(text.subSequence(i, i+1));
digitContainer.addView(digitTextView, 0);
this.addView(digitContainer);
}
}
private void clearText() {
this.removeAllViews();
}
}
Что я хотел бы сделать, это экстраполировать стиль, чтобы я мог повторно использовать тот же пользовательский класс ViewGroup для выделенного значениясиним цветом выше, но это значение стилизовано по-разному, но с той же предпосылкой, что каждый символ содержится в его собственном TextView в родительском RelativeLayout.
Так что мне нужен указатель, как стилизовать дочерние элементы RelativeLayout и TextViewэлементы пользовательской ViewGroup.
В настоящее время, где бы мне ни понадобился новый DigitLayout, я добавляю следующее в соответствующий XML-макет:
<org.barsys.android.widget.DigitLayout
android:id="@+id/dd_fuel_entry_trip_meter_reading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginTop="5dp"
android:gravity="center"
android:orientation="horizontal"></org.barsys.android.widget.DigitLayout>
Я не думаю, что мне следует добавлять RelativeLayout и TextView в макет XML выше, так как они должны бытьдобавляется динамически (так как количество каждого зависит от количества символов).
Итак, я должен создать отдельный XML-файл макета с RelativeLayout в качестве корневого и дочерним TextView для каждого требуемого параметра стиляи если да, то как мой DigitLayout.class узнает, какой стиль XML-макета использовать для каждого экземпляра?
Возможно, использовать LayoutInflater, но как это работает с дочерними элементами?
В качестве альтернативы, если я нахожусь на отметке, дайте мне знать.
Яне требуя полного решения, ссылки на примеры или соответствующие разделы документации были бы хорошими.
Спасибо.