以编程方式添加按钮到布局,但没有出现

时间:2011-10-25 20:40:22

标签: 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);


        }

3 个答案:

答案 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)