2010-03-07 132 views
126

假设我有一个LinearLayout,并且我想从Java代码的程序中为其添加一个View。用什么方法呢?我不是问在XML中它是如何完成的,我确实知道,但是,我该如何做一些事情呢?如何以编程方式将视图添加到视图

(一个视图)。新增(别论)

就像一个可以在Swing做。

回答

186

拨打电话addView是正确的答案,但您需要做的不止是让它工作。

如果您创建通过构造一个视图(例如,Button myButton = new Button();),你需要调用setLayoutParams在新建成的观点,传递父视图的LayoutParams内部类的一个实例,你添加新建成的孩子之前到父视图。

例如,你可能有下面的代码在你的onCreate()功能假设你的LinearLayout有ID R.id.main

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是很重要的。每个视图至少需要一个layout_width和一个layout_height参数。获得正确的内部课程也很重要。我努力将Views添加到TableRow中以正确显示,直到我发现我没有将TableRow.LayoutParams的实例传递给子视图的setLayoutParams。

+3

你如何创建视图编程的,通过使用您为这个新视图专门编写的XML布局文件而设计的? – SK9 2011-01-18 12:31:48

+8

@ SK9您可以使用LayoutInflater,您可以从上下文(通常是当前的“活动”)获取该LayoutInflater。例如: LayoutInflater myInflater = getLayoutInflater; 查看myView = myInflater.inflate(R.layout.myLayout,parent,false); – 2011-01-30 11:05:35

+0

其实getLayoutInflater()来自Window类(不是Context),它是Activity中的一个方便的方法。 – 2011-01-30 11:17:00

15

这是晚,但是这可能帮助别人:) :) 对于添加视图以编程方式尝试像

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); 

这将programmatcally创建整个视图。您可以添加任意数量的视图。希望这可能有所帮助。 :)

34

的人还感兴趣的是:

我找到了最好的方法是使用视图的膨胀静态方法。

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); 
+0

你也可以编写一个静态方法,类似于'addView(View v){//你的代码在获得视图之后}''这将使用'findViewById(int resourceID)'或充气就像你的'inflatedView'一样......只是为了扩展你的片段示例。 – zgc7009 2016-10-09 23:35:04

相关问题