自定义View之继承LinearLayout
自定义View有三种方式:
1:完全自定义View,也就是继承View,或者ViewGroup还有就是SurfaceView
2:半自定义View,所谓半自定View就是继承SDK中已经写好的一些View,比如LinearLayout、RelativeLayout、FragmentLayout、Dialog等等
3:混合自定义View,混合自定义就是在XML文件中引入已经写好的自定义View,例如:<com.xxx.view.MyView ><com.xxx.view.MyView/>
今天要给大家讲的是,如何半自定义View
在继承LinearLayout的时候,必须实现以下4种构造器中的一种,也可以是多种
每个构造器的用途都不同,不了解的可以看一下
Android中自定义样式与View的构造函数中四个参数的意义
今天先教大家使用第一种,LinearLayout(Context context)
public class MyView extends LinearLayout { private Button button; public MyView(final Context context) { super(context); button = new Button(context); /** * 方式1: */ // LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(300,100); // button.setLayoutParams(layoutParams); /** * 方式2: */ addView(button); LinearLayout.LayoutParams layoutParams = (LayoutParams) button.getLayoutParams(); layoutParams.weight = 300; layoutParams.height = 100; button.setLayoutParams(layoutParams); button.setText("我是一个按钮"); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context,"点击了",Toast.LENGTH_SHORT).show(); } }); } }
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); } }
LinearLayout.LayoutParams这句的作用是为 button 设置它的 width 和 height
addView(button);因为是继承自LinearLayout,所以addView的作用就是将一个view对象,添加入LinearLayout的“肚子里”,其方式与以下完全相同
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="我是一个按钮"/> </LinearLayout>
由于是继承自LinearLayout,所以习惯写XML布局的同学注意了,java方式实现的方法与XML中的完全相同