У меня есть настраиваемый макет, определенный в файле XML с корнем RelativeLayout с кучей детского представления.Наращивание пользовательского вида макета в класс расширения макета в Android
Теперь я определил следующий класс:
public class MyCustomView extends RelativeLayout {
public MyCustomView(Context context) {
super(context);
init();
}
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_custom_view, this, true);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Log.d("Widget", "Width spec: " + MeasureSpec.toString(widthMeasureSpec));
Log.d("Widget", "Height spec: " + MeasureSpec.toString(heightMeasureSpec));
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
int chosenWidth = chooseDimension(widthMode, widthSize);
int chosenHeight = chooseDimension(heightMode, heightSize);
int chosenDimension = Math.min(chosenWidth, chosenHeight);
setMeasuredDimension(chosenDimension, chosenDimension);
}
private int chooseDimension(int mode, int size) {
if (mode == MeasureSpec.AT_MOST || mode == MeasureSpec.EXACTLY) {
return size;
} else {
return getPreferredSize();
}
}
private int getPreferredSize() {
return 400;
}
}
Как вы можете видеть, я устанавливаю корень MyCustomView
экземпляра и прикрепить флаг к истине.
Что я хочу достичь, так это то, что когда я добавлю этот пользовательский вид в другой XML-макет, он создаст экземпляр класса MyCustomView
, который будет иметь макет, определенный в XML.
Я уже пытаюсь использовать тег <merge>
, но таким образом я теряю возможность упорядочивать мои представления в формате XML, как я хочу.
Я также пытался раздуть XML и добавить его в виде MyCustomView
, но таким образом я получаю избыточность RelativeLayout
.
Последнее, что я добавил onMeasure()
только для полноты.
Ваша проблема в том, что представления из 'R.layout.widget_view' не отображаются в компоненте' Widget', правильно? – Luksprog
Точно. происходит инфляция, но вид ребенка не показан. –