#android
#Android
Вопрос:
Рассматривая различные примеры, ниже приведен, как представляется, правильный способ добавления представления в макет. Однако у меня ничего не отображается. Я предполагаю, что это как-то связано с параметрами макета, но я новичок, поэтому не знаю, чего не хватает.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.songs_layout);
LinearLayout layout = (LinearLayout) View.inflate(this, R.layout.songs_layout, null);
Button myButton = new Button(this);
myButton.setText("Change View");
myButton.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
layout.addView(myButton);
}
Ответ №1:
Ваша layout
переменная не совпадает с макетом, который вы использовали setContentView
. Попробуйте вызвать setContentView(layout);
after layout.addView(myButton);
и удалить предыдущий вызов it ( setContentView(R.layout.songs_layout);
) .
Чтобы быть более понятным, ваш метод onCreate должен выглядеть следующим образом
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = (LinearLayout) View.inflate(this, R.layout.songs_layout, null);
Button myButton = new Button(this);
myButton.setText("Change View");
myButton.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
layout.addView(myButton);
setContentView(layout);
}
Ответ №2:
Вы не устанавливаете кнопку на отображаемый макет. Вы раздуваете новый макет и добавляете к нему кнопку. Перейдите setContentView()
к after layout.addView(myButton)
, затем измените его на setContentView(layout)
.
Ответ №3:
Решение для контекста фрагмента с помощью Kotlin: там Fragment
, где представление раздувается в onCreateView
решении, немного отличается. Возвращается раздутый макет:
class MyFragment : Fragment()
{
lateinit var v: View
override fun onCreateView(inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?): View? {
v = inflater.inflate(R.layout.my_layout, container, false)
// ...
return v
}
}
В этом случае может сбить с толку то, что выборка родительских кнопок с findViewById
помощью и добавление кнопок в это представление не будут работать:
val buttonsParent = v.findViewById<LinearLayout>(R.id.buttons_parent)
buttonsParent.addView(myButton)
Вместо этого вам нужно добавить кнопки напрямую со следующим синтаксисом:
v.buttons_parent.addView(myButton)