如何以编程方式将视图添加到视图

比方说,我有一个LinearLayout,我想从Java代码的程序中添加一个View到它。 用什么方法呢? 我不是问在XML中是如何完成的,而是我知道,但是我该怎么做呢?

(One View).add(Another View)

就像在Swing中可以做的一样。

调用addView是正确的答案,但是你需要做更多的工作。

如果通过构造函数创build一个View(例如, Button myButton = new Button(); ),则需要在新构造的视图上调用setLayoutParams ,传递父视图的LayoutParams内部类的一个实例,然后添加新构build的孩子到父视图。

例如,假设您的LinearLayout的ID为R.id.main ,您可能在onCreate()函数中包含以下代码:

 LinearLayout myLayout = findViewById(R.id.main); Button myButton = new Button(this); myButton.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); myLayout.addView(myButton); 

确保设置LayoutParams非常重要。 每个视图至less需要一个layout_width和一个layout_height参数。 获得正确的内部课程也很重要。 我努力获得视图添加到TableRow才能正确显示,直到我找出我没有将TableRow.LayoutParams的实例传递给子视图的setLayoutParams。

对于还没有兴趣的人:

我发现的最好的方法是使用View的膨胀静态方法。

 View inflatedView = View.inflate(context, yourViewXML, yourLinearLayout); 

其中yourViewXML类似于R.layout.myView

请注意,您需要一个ViewGroup来添加一个视图(这是您可以想到的任何布局)

所以作为一个例子,可以说你有一个片段,它的视图已经被夸大了,你知道根视图是一个布局,你想添加一个视图到它:

  View view = getView(); // returns base view of the fragment if (view == null) return; if (!(view instanceof ViewGroup)) return; ViewGroup viewGroup = (ViewGroup) view; View popup = View.inflate(viewGroup.getContext(), R.layout.someView, viewGroup); 

LinearLayout是ViewGroup的一个子类,它有一个叫做addView的方法。 addView方法应该是你在之后。

这是迟到,但这可能有助于:) :)以编程方式添加视图尝试像

 LinearLayout rlmain = new LinearLayout(this); LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT); LinearLayout ll1 = new LinearLayout (this); ImageView iv = new ImageView(this); iv.setImageResource(R.drawable.logo); LinearLayout .LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); iv.setLayoutParams(lp); ll1.addView(iv); rlmain.addView(ll1); setContentView(rlmain, llp); 

这将在程序上创build您的整个视图。 您可以添加任意数量的视图。 希望这可能有帮助。 🙂