-
cannot resovle leftparams。。。怎么解决查看全部
-
reference:参考某一资源的id color:颜色值 boolean:布尔值 dimension:尺寸值 float:浮点值 integer:整型值 string:字符串 fraction:百分数 enum:枚举值 flag:位或运算查看全部
-
通用topbar查看全部
-
懒惰的程序猿,通过模板复用、接口回调来提高开发效率、降低耦合度查看全部
-
很不错的教程,大赞查看全部
-
讲的很好,语速不快不慢,温习了接口回调机制,赞赞查看全部
-
TOPBAR设计查看全部
-
(接上) (3)定义一个类似于setOnClickListener()方法给调用者使用 private topbarClickListener listener; public void setOnTopbarClickListener(topbarClickListener listener){ this.listener = listener; } 当调用者调用setOnTopbarClickListener()就将调用者的listener和模板中的this.listener联系在一起。 (4)为button设置点击事件 leftButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { listener.leftClick(); } }); rightButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { listener.rightClick(); } }); 通过这种方法,当点击button时,调用的是传进来的listerner.leftClick()和rightClick()。 也就是说,模板中(Topbar)的button不用关心具体的实现,具体的实现由调用者完成。 (5)调用者将实现点击操作的topbarClickListener接口当做参数传给模板。 topbar.setOnTopbarClickListener(new topbarClickListener() { public void rightClick() {具体实现;} public void leftClick() {具体实现;} }); 4. 添加一个设置自定义控件的接口 模板 public void setLeftButtonVisible(boolean visible){ if(!visible) leftButton.setVisibility(View.GONE); } 调用者:topbar.setLeftButtonVisible(false);查看全部
-
在xml中或代码中使用控件 1. 先看使用系统控件的例子 <TextView android:layout_width="match_parent" 这里android其实是定义在xmlns中的系统属性 xmlns:android="http://schemas.android.com/apk/res/android" xmlns是xml namespace 2. 同理,使用自定义控件 (1)自定义控件的属性 xmlns:custom="http://schemas.android.com/apk/res/com.example.topbar" (2)使用自定义属性 <com.example.topbar.Topbar android:id="@+id/topbar" android:layout_width="match_parent" android:layout_height="40dp" custom:leftBackground="#FFF000" custom:leftText="Back" custom:leftTextColor="#FFFFFF" 3. 使用接口回调机制为button添加点击事件 (1)系统控件的原理 首先通过button.setOnClickListener(OnClickListener参数)。这里的参数是一个接口类,里面包含了一个回调,当点击button时就会执行回调的方法onClick() rightButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { } }); 因为这里的new OnClickListener()返回的是一个接口,所以叫做接口回调。 (2)仿照上面的例子,接下来定义一个类似于OnClickListener的接口 public interface topbarClickListener{ public void leftClick(); public void rightClick(); } (3)定义一个类似于setOnClickListener()方法给调用者使用查看全部
-
模板复用、接口回调查看全部
-
重写控件,满足要求 4. 把这些控件放在ViewGroup(Layout)中 (1)需要用到LayoutParams,这是一个Layout参数 private LayoutParams leftParams, rightParams, tileParams; leftParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE); //这里的TRUE是RelativeLayout中的常量 这样就创建了一个LayoutParams(layout属性)——它是宽高自适应、居左对齐的。 (2)最后调用addView()将leftButton以leftParams的形式加入到ViewGroup中 addView(leftButton, leftParams); (3)LayoutParams这个类要再说一下 它定义了布局的属性,即控件是以什么属性(宽高,位置)添加到ViewGroup中查看全部
-
重写控件,满足要求 1. 自定义一个Topbar类View继承自RelativeLayout 如果Topbar UI模板(View)需要自定义属性,其构造函数就要使用public Topbar(Context context, AttributeSet attrs) 2. 定义UI模板中的三个控件,声明要使用的属性 private Button leftButton, rightButton; private TextView tvTitle; 3. 给这些控件赋值,将属性和控件关联起来。在构造函数获得在xml中自定义的属性,并把这些属性值赋给这些控件 (1)通过TypeArray这个数据结构,来存储从xml中获取的自定义属性的值 TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.Topbar); 其中obtainStyledAttributes(AttributeSet set, int[] attrs)第二个参数为xml定义的属性集合,所以为R.styleable.Topbar 通过这种方法,把在xml自定义的属性值映射到所定义的自定义属性中去,然后返回TypeArray变量。 TypedArray类似于Map键值对,这个变量包含了所有属性和值的映射。 (2)从TypedArray中获取属性值 leftTextColor = ta.getColor(R.styleable.Topbar_leftTextColor, 0); 这里是通过下划线的方式连接Topbar自定义属性和属性的名字,得到一个引用名。后面0是默认值。 通过这种方法就从TypedArray中取出所有的属性值,并赋值给相应的变量。 (3)实例化控件 leftButton = new Button(context); rightButton = new Button(context); tvTitle = new TextView(context); (4)将前面获得属性值赋给这些控件 leftButton.setTextColor(leftTextColor); leftButton.setBackground(leftBackground); leftButton.setText(leftText);查看全部
-
在atts.xml中定义组件属性 1. atts.xml文件中的<declare-styleable>标签是告诉系统,下面是我们自己声明的属性名。 <declare-styleable name="Topbar"> 2. format为reference表示这个属性值可以引用资源文件:如@drawable/... <attr name="leftBackground" format="reference|color"></attr>查看全部
-
1. 系统的空间View属性是如何实现的(如图)查看全部
-
设计步骤查看全部
举报
0/150
提交
取消