TextViews Gravity не работает вертикально
Когда я рисую DrawingCache TextView в Canvas другого просмотра, гравитация TextView не действует в вертикальном направлении.
Вот класс, рисующий холст TextViews для собственного холста:
public class GravityDecorator extends View{
private View view;
private Paint paint= new Paint();
public GravityDecorator(View view,Context context) {
super(context);
this.view = view;
view.setDrawingCacheEnabled(true);
view.layout(0, 0,600,500);
this.layout(0, 0,600,500);
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
view.buildDrawingCache();
canvas.drawBitmap(view.getDrawingCache(), 0, 0, paint);
view.destroyDrawingCache();
}
}
Вот код для проверки (onCreate):
ViewGroup root = (ViewGroup) findViewById(R.id.root); // is a linear_layout - width and height is match_parent
TextView tv = new TextView(getApplicationContext());
tv.setText("Hello World!");
tv.setTextSize(40.0f);
tv.setLayoutParams(new LinearLayout.LayoutParams(300,200));
tv.setTextColor(Color.WHITE);
tv.setBackgroundColor(Color.parseColor("#3131c5"));
tv.setGravity(Gravity.CENTER);
GravityDecorator gd = new GravityDecorator(tv, getApplicationContext());
root.addView(gd);
Как видите, гравитация содержимого TextViews действует только в горизонтальном направлении.
В чем причина и как обойти это, если это ошибка?
Спасибо
1 ответ
Решение
root = (ViewGroup) findViewById(R.id.root); // is a linear_layout - width and height is match_parent
tv = new TextView(getApplicationContext());
tv.setText("Hello World!");
tv.setTextSize(40.0f);
tv.setLayoutParams(new LinearLayout.LayoutParams(300,200));
tv.setTextColor(Color.WHITE);
tv.setBackgroundColor(Color.parseColor("#3131c5"));
tv.setGravity(Gravity.CENTER);
tv.invalidate();
root.addView(tv);
GravityDecorator gd = new GravityDecorator(tv, getApplicationContext());
root.addView(gd);
Может быть потому, что параметр макета не устанавливается для TextView
Первоначально. Попробуйте добавить представление в Parent, а затем получить drawingCache
,
public class GravityDecorator extends View{
private View view;
private Paint paint= new Paint();
public GravityDecorator(View view,Context context) {
super(context);
this.view = view;
view.setDrawingCacheEnabled(true);
view.layout(0, 0,600,500);
this.layout(0, 0,600,500);
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
view.buildDrawingCache();
Bitmap bmp = view.getDrawingCache();
canvas.drawBitmap(bmp, 0, 0, paint);
view.destroyDrawingCache();
if(root.indexOfChild(tv) != -1)
root.removeView(tv);
}
}