查看各种示例,下面是将视图添加到布局的正确方法。然而,没有任何东西出现在我身上。我假设它与布局选项有关,但我是新的,所以我不知道缺少什么。
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);
}
答案 0 :(得分:2)
您的layout
变量与您在setContentView
中使用的布局不同。尝试在setContentView(layout);
后调用layout.addView(myButton);
并删除之前的调用(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);
}
答案 1 :(得分:0)
您没有将按钮设置为显示的布局。您正在为新布局充气并将按钮添加到该布局。将setContentView()
移至layout.addView(myButton)
之后,然后将其更改为setContentView(layout)
。
答案 2 :(得分:0)
使用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)