LinearLayout类的三种构造方法有什么区别

 我来答
无语翘楚
高粉答主

2016-09-27 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:2.5万
采纳率:88%
帮助的人:2547万
展开全部
自定义LinearLayout的方式有三种。
第一种是在扩展的LinearLayout构造函数中使用Inflater加载一个布局,并从中提取出相关的UI组件进行封装,形成一个独立的控件。在使用该控件时,由于配毁指它所有的子元素都是在运行时通过代码动态创建的,所以该控件只能以一个独立控件的形式在Layout文件中声明,例如:
public class CustomLayout extends LinearLayout{

public CustomLayout(Context context){
LayoutInflater mInflater = LayoutInflater.from(context);
View myView = mInflater.inflate(R.layout.receive, null);
addView(myView);

}

}
< LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
androidundefinedrientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
androidundefinedrientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button" />
</LinearLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

< /LinearLayout>

第二种方式是:在自定义控件中声明它的所有子元素,然后在Layout文件中像使用LinearLayout一样去进行布局,不过切记:自定义控件Code中声明的UI元素必须与Layout文件中声明的元素保持一致,否则,在代码中无法培配找到对应的控件;最后,在自定义控件的onInflateFinish中通过findViewById将layout中声明的控件跟代码中声明的控件匹配起来,例如有某个自定义控件:public class CustomLayout extends LinearLayout{
ListView mListView; //代码中声明的控件
XXXX; //针对UI控件封装的操作
}
Layout文件中使用该布局进行声明余绝:
<com.XX.CustomLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
androidundefinedrientation="vertical" >
<ListView android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/ListView01"
/>
<.........>
< /com.XX.CustomLayout>
最后在代码中进行匹配:
protected void onFinishInflate()
{
mListView=(ListView)findViewById(R.id.ListView01);
mListView.setAdapter(mAdapter);
mListView.setSelector(new ColorDrawable(Color.TRANSPARENT));
mListView.setBackgroundColor(0xF3EEE5);
mListView.setCacheColorHint(0);
mListView.setDivider(null);

}

第三种方式是:这个自定义VIEW中的任何控件都不是通过XML文件来定义的,而是在JAVA代码中通过动态生成的,然后再addView()加入到你自定义的View中,
如:
private class SpeechView extends LinearLayout {

private TextView mTitle;

private TextView mDialogue;

public SpeechView(Context context, String title, String words) {

super(context);

this.setOrientation(VERTICAL);

// Here we build the child views in code. They could also have

// been specified in an XML file.

mTitle = new TextView(context);
mTitle.setText(title);

addView(mTitle, new LinearLayout.LayoutParams(

LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

mDialogue = new TextView(context);

mDialogue.setText(words);

addView(mDialogue, new LinearLayout.LayoutParams(

LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

}

/**

* Convenience method to set the title of a SpeechView
*/

public void setTitle(String title) {

mTitle.setText(title);

}

/**
* Convenience method to set the dialogue of a SpeechView

*/

public void setDialogue(String words) {

mDialogue.setText(words);

}

}

如果在其它的布局文件中要用到这个自定义的View,则在那个布局文件中在适当的位置处加入:
如在main.xml 中通过

<com.XX.CustomLayout android:id="@+id/youcustom"
android:layout_width="XX"
android:layout_height="YY" />
然后在java代码中通过CustomLayout layout=(CustomLayout)fatherView.FindViewById(R.id.youcustom)
实例化它
陈余彦cyy
2016-09-25 · 超过199用户采纳过TA的回答
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:282万
展开全部
LinearLayout类的三种构造方法有什么区别
如果要需要在真机上运行,需要将jsCodeLocation中地址改为本机的ip地址,比如192.168.1.x之类的,这样就可以在真机上运行,但是还是不能发布到appstore上面去。发布的时候,需要将前御该代码注释
jsCodeLocation = [NSURL URLWithString:@"http:// localhost:8081/index.ios.bundle"];
,反注释这一行代码:
jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
这样,该应用就可以一直在真机上运行,而不依靠开发环境的支持了。
发布的时候,还慧丛岩要记得选择release版本郑碰,这样调试菜单才不会出现。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式