自定义LinearLayout
来源:互联网 发布:windows外观设置 编辑:程序博客网 时间:2024/05/14 06:12
最近通过看别人代码和网上搜索,发现现在自定义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)
实例化它
第一种是在扩展的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)
实例化它
0 0
- 自定义LinearLayout
- 自定义LinearLayout
- 自定义Linearlayout
- Android 自定义 LinearLayout
- 如何自定义LinearLayout
- Android 自定义 LinearLayout
- android 自定义LinearLayout
- ViewGroup初探,自定义LinearLayout
- 自定义可拖拽的LinearLayout
- 自定义可折叠LinearLayout
- 使用LinearLayout,ScrollView自定义ListView,
- android之【LinearLayout自定义View】
- 自定义LinearLayout 添加click事件
- 自定义超出布局的LinearLayout
- Android自定义控件---继承Linearlayout
- 自定义组件-LinearLayout、RelativeLayout
- 自定义垂直跑马灯LinearLayout
- android自定义LinearLayout和View
- php 抓取微信列表中的最新的一组微信消息
- crontab 不能正常执行的几种可能的问题
- 纵论开发FrameWork框架,推荐Webwork+Ibatis+Spring
- javascript 中文排序
- 第七章_标签文件
- 自定义LinearLayout
- Android Support v4、v7、v13的区别和应用场景
- hive Lateral View语法
- 静态库冲突
- stagefright框架
- UNITY_MATRIX_IT_MV[Matrix]
- linux下串口的阻塞和非阻塞操作
- 【算法设计】虎溪校园导游系统
- TCP和UDP协议发送数据包的大小方面的知识介绍