假设我有一个LinearLayout,并且我想从Java代码的程序中为其添加一个View。用什么方法呢?我不是问在XML中它是如何完成的,我确实知道,但是,我该如何做一些事情呢?如何以编程方式将视图添加到视图
(一个视图)。新增(别论)
就像一个可以在Swing做。
假设我有一个LinearLayout,并且我想从Java代码的程序中为其添加一个View。用什么方法呢?我不是问在XML中它是如何完成的,我确实知道,但是,我该如何做一些事情呢?如何以编程方式将视图添加到视图
(一个视图)。新增(别论)
就像一个可以在Swing做。
LinearLayout是ViewGroup的一个子类,它有一个名为addView的方法。 addView方法应该是你以后的样子。
拨打电话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。
这是晚,但是这可能帮助别人:) :) 对于添加视图以编程方式尝试像
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创建整个视图。您可以添加任意数量的视图。希望这可能有所帮助。 :)
的人还感兴趣的是:
我找到了最好的方法是使用视图的膨胀静态方法。
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);
你也可以编写一个静态方法,类似于'addView(View v){//你的代码在获得视图之后}''这将使用'findViewById(int resourceID)'或充气就像你的'inflatedView'一样......只是为了扩展你的片段示例。 – zgc7009 2016-10-09 23:35:04
你如何创建视图编程的,通过使用您为这个新视图专门编写的XML布局文件而设计的? – SK9 2011-01-18 12:31:48
@ SK9您可以使用LayoutInflater,您可以从上下文(通常是当前的“活动”)获取该LayoutInflater。例如: LayoutInflater myInflater = getLayoutInflater; 查看myView = myInflater.inflate(R.layout.myLayout,parent,false); – 2011-01-30 11:05:35
其实getLayoutInflater()来自Window类(不是Context),它是Activity中的一个方便的方法。 – 2011-01-30 11:17:00