#android #android-edittext #android-linearlayout #surfaceview #android-framelayout
#Android #android-редактировать текст #android-linearlayout #surfaceview #android-framelayout
Вопрос:
В настоящее время у меня есть SurfaceView (с именем BoardView), который хранится в FrameLayout. В этом FrameLayout (f1) хранится другое LinearLayout (l1), которое содержит EditText. Я хочу иметь возможность выводить EditText на передний план из моего BoardView. Возможно ли это? Я пытался использовать getParent().bringChildToFront(); но это не сработало. Есть идеи?
public class Board extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//use a frame layout so you can also display a dialog box
// allows more than one view to be used
FrameLayout f1 = new FrameLayout(this);
LinearLayout l1 = new LinearLayout(this);
EditText edit = new EditText(this);
l1.setOrientation(LinearLayout.VERTICAL);
l1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
edit.setText("Enter your name!");
l1.addView(edit);
f1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
f1.addView(l1);
f1.addView(new BoardView(this));
setContentView(f1);
//setContentView(new BoardView(this));
}
}
Ответ №1:
Звучит довольно глупо, но попробуйте l1.bringToFront()
и посмотрите, работает ли это? В качестве альтернативы просто добавьте l1
второе:
f1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
f1.addView(new BoardView(this));
f1.addView(l1);
и текст редактирования будет сверху.
Дайте мне знать, если это сработает.
Комментарии:
1. Дело в том, что «l1» не может быть разрешено. Я хочу показывать l1 ТОЛЬКО тогда, когда что-то происходит в SurfaceView. В принципе, когда игра заканчивается, я хочу показать это новое представление. Думаю, я мог бы сделать текущее представление невидимым, верно?
2. Ах, так вот в чем вопрос: покажите код, в котором вы производите переключение
3. Ну, на самом деле фрагмент кода довольно длинный. У меня есть пользовательский SurfaceView — там недостаточно места для размещения кода здесь:/ Что я должен сделать, чтобы показать вам? Название моего класса выглядит примерно так. общедоступный класс BoardView расширяет SurfaceView, реализует SurfaceHolder. Обратный вызов{
4. Есть ли проблема, потому что это пользовательский класс? Наверняка должен быть какой-то способ сделать это.
5. Не должно иметь значения. Проблема не устранена только потому, что ваш пользовательский класс не имеет видимости
l1
объекта. Я бы предложил присвоить идентификаторыl1
, а затем использовать идентификатор: так сделайтеl1.setId(1);
вonCreate
приведенном выше, а затем в вашем пользовательском классе используйте((View)getParent()).findViewById(1).bringToFront();
для обновления z-порядка.