博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义UI实例
阅读量:2392 次
发布时间:2019-05-10

本文共 4355 字,大约阅读时间需要 14 分钟。

      我们这里写两个实例,第一个是完全自定义的UI;第二个是组合部件的自定义UI。

完全自定义UI示例

    第一步:新建一个工程命名为:custom_ui;

    第二步:实现自定义的UI类,这里选择继承自View,主要就是注意一下构造函数和以on...开头的覆盖的函数,这里仅仅覆盖onDraw()函数,具体代码如下:

public class MyView extends View {	private Paint mPaint;		public MyView(Context context) {		super(context);		// TODO Auto-generated constructor stub		InitMyView();	}    private final void InitMyView() {        mPaint = new Paint();        mPaint.setAntiAlias(true);        mPaint.setColor(Color.RED);        setPadding(3, 3, 3, 3);    }    	public MyView(Context context, AttributeSet attrs) {		super(context, attrs);		// TODO Auto-generated constructor stub		InitMyView();	}		@Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawCircle(50, 50, 30, mPaint);    }}
    第三步:修改布局文件,添加我们的自定义组件,如下:

     这里需要注意的是,第二行的名字空间声明,我们使用了默认的android名字空间,因为此刻我们没有添加自己的属性和参数,都是使用系统默认的,所以可以不添加,当自定义了UI组件的属性和参数时就必须加上自己的名字空间,否则这些属性和参数不能被正确的解析。

    第四步:运行程序,效果如下:

 到这里,就实现了一个简单的完全自定义UI,其实主要还是看实现思路,这在之前的,大家可以看看。

      前面谈到了实现自定义的属性和参数,这里我们也来实现一下,在API Demos中有一个示例,我们这里先贴一下官方给的示例代码,然后参考这个实现:

官方示例代码:

我们这里自定义一个属性,就是颜色,当然,这只是一个示例,没什么实际意义。接着上面的工程写:

     第五步:在res/values目录下面创建一个attrs.xml文件,自定义我们的属性和参数,如下:

      第六步:修改MyView的构造函数,使得其可以解析我们自定义的属性和参数,代码如下:

public MyView(Context context, AttributeSet attrs) {		super(context, attrs);		// TODO Auto-generated constructor stub		InitMyView();		TypedArray a = context.obtainStyledAttributes(attrs,                R.styleable.MyView);        // Retrieve the color(s) to be used for this view and apply them.        // Note, if you only care about supporting a single color, that you        // can instead call a.getColor() and pass that to setTextColor().        setColor(a.getColor(R.styleable.MyView_frontColor, 0xFF000000));        a.recycle();	}	    public void setColor(int color) {        mPaint.setColor(color);        invalidate();    }
      第七步:在我们的布局文件中使用我们的自定义属性和参数,但是注意:此时,一定要加上我们自己的名字空间,如下:

       第三行就是我们自定义名字空间,可能大家这下就明白了我们的自定义属性都是app:XX这样来使用,看第三行就懂了。

     第八步:运行程序,效果如下:

    呵呵,效果实现了,关于完全自定义属性就介绍到这里,下面来介绍组合部件的创建和使用。

组合部件的自定义UI示例

      首先来说一下要实现的效果:包含三个views,一个SeekBar,一个TextView和一个EditText。其中我们移动SeekBar,那么改变的值就会在EditText中显示出来,这个组合组件对于输入是比较有用的,利用,让你输入一个0到100的数值,你可以通过在EditText中直接输入,也可以通过SeekBar来输入,但是SeekBar的值不是特别明显,所以我们在EditText中显示出来,这也只是一个小例子。

     第一步:创建一个新的工程:comp_ui;

     第二步:我们选择继承自LinearLayout,那么先来创建一个布局文件comp_ui.xml,代码如下:

       第三步:完成组合组件类Comp_ui.java,继承自上面的LinearLayout,代码如下:

public class Comp_ui extends LinearLayout {	 private SeekBar seekBar;	 private TextView hint;	 private EditText input;		public Comp_ui(Context context) {		super(context);		// TODO Auto-generated constructor stub	}		public Comp_ui(Context context, AttributeSet attrs) {		super(context, attrs);		// TODO Auto-generated constructor stub		LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);          inflater.inflate(R.layout.comp_ui, this);          seekBar=(SeekBar)findViewById(R.id.seekBar);          hint=(TextView)findViewById(R.id.hint);         input = (EditText)findViewById(R.id.input);	}		public void setSeekBarValue() {		seekBar.setMax(100);          seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {						public void onStopTrackingTouch(SeekBar seekBar) {				// TODO Auto-generated method stub							}						public void onStartTrackingTouch(SeekBar seekBar) {				// TODO Auto-generated method stub							}						public void onProgressChanged(SeekBar seekBar, int progress,					boolean fromUser) {				// TODO Auto-generated method stub				input.setText("" + seekBar.getProgress());				//System.out.println(progress);			}		});	}		public void setEditTextValue() {	}	}
      第四步:在工程中应用我们自己的组合组件,修改main.xml文件如下:

     第五步:在Activity中使用,代码如下:

public class Comp_uiActivity extends Activity {	private Comp_ui comp_ui;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        comp_ui = (Comp_ui)findViewById(R.id.my_ui);        comp_ui.setSeekBarValue();        comp_ui.setEditTextValue();    }}
    第六步:看运行效果:

     好了,今天就介绍到这里。

转载地址:http://vvqab.baihongyu.com/

你可能感兴趣的文章
Data Breach Report
查看>>
再探偏移注射
查看>>
DNS Security Tips
查看>>
符号执行
查看>>
Remote Installation Service (RIS) in Windows Server 2003
查看>>
Layer Four Traceroute
查看>>
Hardening guide for Apache 2.2.15 on RedHat 5.4 (64bit edition)
查看>>
STP mitm attack idea
查看>>
Month of PHP Security - Summary
查看>>
近期将要购买的图书
查看>>
nginx Directory Traversal Vulnerability
查看>>
Linux下apache+svn+ssl完美结合搭建安全版本控制平台
查看>>
Nginx 0.8.35 Space Character Remote Source Disclosure
查看>>
showrun的cissp经验谈
查看>>
6月4日要买的书
查看>>
nginx Remote Source Code Disclosure and Denial of Service Vulnerabilities
查看>>
Anti-sec安全培训 部分试看视频
查看>>
FreeBSD kernel NFS client local vulnerabilities
查看>>
JXplorer 的简单使用
查看>>
如何启用 LDAP 签名 Windows Server 2008 中
查看>>