У меня есть следующие классы:тяжесть ребенка TextView не работает с пользовательским ViewGroup
public class MyGridView extends ViewGroup {
...
@Override
public void onSizeChanged(int xNew, int yNew, int xOld, int yOld) {
super.onSizeChanged(xNew, yNew, xOld, yOld);
// do calculations for drawing bounds of child views
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
View child;
Rect rect;
for (int i=0; i < getChildCount(); i++) {
child = getChildAt(i);
rect = getBoundsAtChildIndex(i)
child.layout(rect.left, rect.top, rect.right, rect.bottom);
}
}
...
}
И
public class MyAdapter {
public void setMyGridView(MyGridView myGridView) {
// add a single TextView to my grid view
textView = createTextView(context);
addTextViewToGrid(textView);
container.add(textView);
}
private TextView createTextView(Context context) {
TextView textView = new TextView(context);
textView.setText("1");
textView.setTextColor(0xffffffff);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12f);
textView.setTypeface(typeface);
textView.setGravity(Gravity.CENTER | Gravity.FILL);
// textView.setGravity(Gravity.RIGHT); // other tries to see gravity
// textView.setGravity(Gravity.FILL);
return textView;
}
private void addTextViewToGrid(TextView textView) {
myGridViewPtr.addView(textView, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
}
...
}
Я создал вид пользовательскую сетки и адаптер, где его дети рисуют на экран на правильный размер и местоположение. Однако их гравитация, установленная в createTextView(), не наблюдается.
Я могу установить фоновое изображение в textView и увидеть его заполнить его пространство в сетке.
Наоборот, текст в textView всегда рисуется в верхнем левом углу, и он всегда остается в размере текста, который я устанавливал на 12 с, а не на шкале, чтобы соответствовать с помощью Gravity.FILL.
Предпочтительно текст будет масштабироваться, чтобы соответствовать и центрировать в текстовом виде.
РЕДАКТИРОВАТЬ
Я добавил следующий метод для onMeasure() в ViewGroup:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = getMeasuredWidth();
int height = getMeasuredHeight();
doUpdateOnSizeChanged(width, height);
for (int i = 0; i < getChildCount(); i++)
getChildAt(i).measure((int) viewDim.x, (int) viewDim.y);
setMeasuredDimension(width, height);
}
Дети должны быть одинаковой высоты, ширины, как и друг с другом. Код примера Android для ViewGroup более сложный, чем я требую. Например, я не получаю максимальную ширину и высоту всех детей.
Для моего onMeasure() ширина ребенка, высота в ViewDim - это ширина, высота целых чисел, которые вычисляются в doUpdateOnSizeChanged, чтобы быть меньше, чем getMeasuredWidth, getMeasuredHeight.
В результате текст выравнивается в нижнем левом углу TextView.
читать о onMeasure – pskink
Как, как по мере идет из примеров, которые я смотрел, он в основном измерения, как только чтение, чтобы вычислить ширину и высоту самой группы просмотра, а затем, наконец, вызывает вызов setMeasured. Я не совсем понимаю, какой метод мог бы что-то сделать для измерения и измерения. –