Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55830
  • 博文数量: 10
  • 博客积分: 984
  • 博客等级: 准尉
  • 技术积分: 71
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-06 08:13
文章分类
文章存档

2019年(1)

2016年(5)

2015年(2)

2009年(2)

分类: Android平台

2015-03-31 15:44:52

最近通过看别人代码和网上搜索,发现现在自定义LinearLayout的方式有三种。
第一种是在扩展的LinearLayout构造函数中使用Inflater加载一个布局,并从中提取出相关的UI组件进行封装,形成一个独立的控件。在使用该控件时,由于它所有的子元素都是在运行时通过代码动态创建的,所以该控件只能以一个独立控件的形式在Layout文件中声明,例如:
public class MyLinearLayout extends LinearLayout{


       public  MyLinearLayout(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" >
            android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          androidundefinedrientation="horizontal">
                             android:layout_width="wrap_content"
                  android:layout_height="wrap_content" />
                           android:layout_width="wrap_content"
                  android:layout_height="wrap_content" 
                  android:id="@+id/button" />
 
  
                               android:layout_width="wrap_content"
                  android:layout_height="wrap_content" />        
                   
< /LinearLayout>


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


            android:layout_width="XX"
            android:layout_height="YY" />
然后在java代码中通过MyLinearLayout layout=(MyLinearLayout)fatherView.FindViewById(R.id.youcustom)
实例化它
阅读(1903) | 评论(0) | 转发(0) |
0

上一篇:cu简介

下一篇:在android中进行视频的分割

给主人留下些什么吧!~~