我是新手,所以,任何帮助都表示赞赏。我在StackOverflow上阅读了很多帖子,我也在谷歌搜索了我的疑问,但很难找到一个好的答案。
以下是我要做的事情:
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<ImageButton
android:background="@layout/roundcorners"
android:id="@+id/hug"
android:scaleType="centerInside"
android:cropToPadding="false"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingBottom="10dip"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:src="@drawable/hug">
</ImageButton>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:textColor="#000000"
android:textSize="15dip"
android:textStyle="bold"
android:paddingBottom="5dip"
android:clickable="true"
android:text="Hug">
</TextView>
</FrameLayout>
上面你们可以看到我需要的XML版本。
重点是......我将在运行时拥有许多这些FrameLayouts。填写按钮的每个信息都来自数据库。
所以,我需要创建一个Java类,我可以在我的数据库中使用循环遍历所有寄存器并实例化一个新的FrameLayout类(这个类必须有一个ImageButton和一个TextView,你可以从上面的XML中看到)和只需传递参数,如下:
for (int i = 0; i < mArray.length; i++) {
button = new MyNewImageButton(name, src, text);
}
以上只是为了简化。我的意思是,在创建我计划创建的此类的实例时,我将从数据库传递参数。当然,创建的每个按钮都会添加到布局中。
所以...我的问题是:我知道如何使用XML来做到这一点,但我真的很难创建一个类来执行此操作。
有什么想法?任何帮助都表示赞赏。
P.S。:对不起,如果我的英语出错了,好吗?我是巴西人。总有一天,我的英语将完美无瑕!对不起,如果这个问题已经回答了。
很抱歉回答我自己的问题,提出另一个问题。我试着使用评论,但是字符数有限制,所以,我真的很抱歉。
嘿伙计们和@blessenm。好吧......我尝试使用inflater,我想出了以下代码:
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// *******************************************
setContentView(R.layout.main);
//this is my main screen
//it's a linearlayout vertical orientation
ViewGroup parent = (ViewGroup) findViewById(R.id.tela_principal);
//these two new LinearLayouts will be one above the other,
//just like two lines
LinearLayout l1 = new LinearLayout(this);
LinearLayout l2 = new LinearLayout(this);
//inside of each linearlayout I set the orientation to horizontal
//so, everytime a picture is inflated from xml, it will fill in one
//linearlayout
l1.setOrientation(LinearLayout.HORIZONTAL);
l2.setOrientation(LinearLayout.HORIZONTAL);
//setting linearlayout parameters, so they fill the whole screen
l1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
l2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
//the first two inflated xml imagebuttons I add to LinearView1
view = LayoutInflater.from(getBaseContext()).inflate(R.layout.figurabotao,
l1, true);
view = LayoutInflater.from(getBaseContext()).inflate(R.layout.figurabotao,
l1, true);
//the next two inflated xml imagebuttons I add to LinearView2
view = LayoutInflater.from(getBaseContext()).inflate(R.layout.figurabotao,
l2, true);
view = LayoutInflater.from(getBaseContext()).inflate(R.layout.figurabotao,
l2, true);
//after the above, we should have a grid 2X2
//after linearlayouts are filled, I add them to the main screen
parent.addView(l1, new LinearLayout.LayoutParams(0, 0, 1));
parent.addView(l2, new LinearLayout.LayoutParams(0, 0, 1));
然而这不起作用。在错误日志中,我收到以下消息:
“未处理的事件循环异常”。
关于我做错了什么的想法?
谢谢!
答案 0 :(得分:1)
如果您只是尝试从xml创建视图并将其添加到布局中。只需使用LayoutInflater。
在活动内部使用类似
的内容FrameLayout frame = (FrameLayout)getLayoutInfalter.inflate(
R.id.YOUR_VIEW_XML,null);
layout.addView(frame);
如果您尝试创建类,请扩展框架布局或视图。创建一个构造函数,它接受您的参数并指定所需的值。
编辑: 内部的Acess元素 如果您已将id设置为这些元素,则可以通过
访问它们TextView text = (TextView)frame.findViewById(R.id.yourtextview);
或者您可以使用像
这样的子索引TextView text = (TextView)frame.getChildAt(0);
答案 1 :(得分:0)
听起来你正在寻找一种方法来创建一个视图类,它将是一个ImageButton和一个用FrameLayout包装的TextView。
在这种情况下,您可以考虑创建自己的View类。可能是一个扩展FrameLayout的View类。有关如何创建自定义视图的详细信息,请参阅此开发文章。 http://developer.android.com/guide/topics/ui/custom-components.html
特别是“复合控制”部分:http://developer.android.com/guide/topics/ui/custom-components.html#compound