Я прочитал несколько тем о надувных устройствах вне Activity, но предложенные решения не сработали. У меня нет ошибок, ConstraintLayout
просто не отображается.
Вот что я хочу что нужно сделать:
Я разрабатываю игру (ориентация экрана - «альбомная»), поэтому я создал GameView
, в котором есть прогон l oop, и я делю экран на два детали на холсте (без фрагмента):
слева экран игры. Его размеры: height = screen_height
, width = game_width
справа, я хочу нарисовать панель инструментов (a ConstraintLayout
), содержащую некоторые вещи (стрелки направления, информацию о пользователе, ...)
Я инициализирую панель инструментов в конструкторе и рисую ее в функции рисования.
Панель инструментов XML код:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/toolbar_layout"
android:background="@color/light_brown
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- ImageViews, Buttons -->
</androidx.constraintlayout.widget.ConstraintLayout>
Код GameView
:
public class GameWorldView extends SurfaceView implements Runnable {
private ConstraintLayout toolbar = null;
// ... and other attributes
// constructor
public GameWorldView(Context context, int screen_x, int screen_y) {
//... do some stuff
toolbar = new ConstraintLayout(context);
toolbar.layout(0,0,width,height);
toolbar.setBackgroundColor(Color.parseColor("#00ffff")); //cyan
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ConstraintLayout inner_toolbar = (ConstraintLayout) inflater.inflate(R.layout.toolbar_layout, toolbar,false);
toolbar.addView(inner_toolbar);
}
// draw on the canvas
private void draw(){
if(holder.getSurface().isValid()) {
canvas = holder.lockCanvas();
canvas.drawColor(Color.argb(255, 255, 255, 255));
// ... draw everything and then the toolbar
canvas.save();
canvas.translate(x_begin, 0);
toolbar.draw(canvas);
canvas.restore();
holder.unlockCanvasAndPost(canvas);
}
}
}
Я вижу голубой прямоугольник в нужном месте (когда я не устанавливаю цвет фона, я вижу цвет GameView
, который Я установил функцию «рисовать»), но она не показывает макет «панели инструментов», который я накачал.
Я пробовал разные вещи, которые видел в других сообщениях, например:
LayoutInflater inflater = LayoutInflater.from(context);
или попытка определить панель инструментов как LinearLayout
вместо ConstraintLayout
.
Я думаю, что проблема в трех строках о надувном устройстве, но я нашел их в других сообщениях, пытающихся решить проблему, похожую на мою ...
Спасибо.