Android 3
来源:互联网 发布:sqlserver 视图概念 编辑:程序博客网 时间:2024/05/17 12:55
dp,sp,px
Inflater
获取Inflater的三种方式
提取布局属性
1.Theme 是窗体级别的,改变窗体样式
2.改变指定控件或layout的样式
style是可以继承的
属性的优先原则是,控件属性>style>style的父类
自定义控件(2)
View是如何工作的
下边介绍一下具体的代码
首先,创建一个自定义控件类
public class RoundButton extends View { private Paint buttonPaint = null; private Rect rect = null; private Integer count = 0; private Integer backgroundColor; public RoundButton(Context context) { this(context, null); } public RoundButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RoundButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); } //初始化,实例化必要的对象,获取自定义属性 private void init(Context context, AttributeSet attrs) { buttonPaint = new Paint(); rect = new Rect(); // 获取自定义属性集合 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundButton); // 获取一个自定义控件的属性,第一个参数是,属性名称,第二个参数是默认值,即未指定此属性值的情况下,将使用默认值 backgroundColor = typedArray.getColor(R.styleable.RoundButton_backgroundColor, Color.RED); // 给此自定义控件添加单击事件 setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { //每次点击 +1 ++count; // 刷新 invalidate(); } }); } //绘制 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 设置颜色 buttonPaint.setColor(backgroundColor); // 在画布上绘制一个圆形 canvas.drawCircle(240, 240, 200, buttonPaint); buttonPaint.setColor(Color.WHITE); buttonPaint.setTextSize(100); // 通过getTextBounds获取一个字符串将要占用的大小 buttonPaint.getTextBounds(count.toString(), 0, count.toString().length(), rect); //通过上边取得的区域大小(rect实例),通过计算使文字显示在中心 canvas.drawText(count.toString(), 240 - rect.width() / 2, 240 + rect.height() / 2, buttonPaint); } }
不要忘记,还需要在layout中定义出来哦,如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context="com.lisen.part3.ShowActivity"> <com.lisen.part3.RoundButton //使用的自定义控件 android:layout_width="wrap_content" android:layout_height="wrap_content" app:backgroundColor="#4444ff"/> </RelativeLayout>
自定义属性
在创建自己的控件后,就可以给它创建属于自己的属性了.
这里我们继续使用上边的自定义控件,这里一眼就可以看出有一个自定义属性app:backgroundColor=”#4444ff”
之所以有app:是因为这句话xmlns:app=”http://schemas.android.com/apk/res-auto” 一个xml命名空间
自定义属性需要创建在attrs.xml中,如果没有的话,可以在res/values目录下创建
内容如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="RoundButton"> <attr name="backgroundColor" format="color" /> </declare-styleable> </resources>
Fragment 碎片
在一个活动上,我们可以显示或隐藏一个更小的活动,而这种活动称为碎片.它可以让我们更充分的利用屏幕并且达到更好的用户体验
如何创建一个碎片
public class BlankFragment extends Fragment { //这里新建一个类,继承Fragment,这里的Fragment是android.app.Fragment @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 读取一个视图文件并解析 return inflater.inflate(R.layout.fragment_blank, container, true); } }
以下是在一个Activity中所写的代码
// Activity 的 onCreate事件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show_fragment); // 获取一个碎片管理器 FragmentManager fragmentManager = getFragmentManager(); // 开始碎片事务 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); BlankFragment blank = new BlankFragment(); // 通过add方法添加碎片,并提交事务. // 这里的R.id.layoutTest 是在当前的Activity的layout文件中创建的布局 fragmentTransaction.add(R.id.layoutTest, blank).commit(); }
BroadcastReceiver 广播
广播存在系统广播与自定义广播,系统广播主要有Android自己发送,例如:电量不足
广播的注册方式:
1.静默注册
静默注册,即在AndroidManifest.xml 中注册.例如:
```xml<receiver android:name=".broadcastreceiver.MyReceiver" android:enabled="true" android:exported="true"> <intent-filter> //一个过滤器 <action android:name="com.xxx.broadcastreceiver" /> //只接收来此自定义的广播 </intent-filter></receiver>```
2.动态注册
public class BroadcastActivity extends AppCompatActivity implements View.OnClickListener { public static final String ACTION = "com.lisen.part3.broadcast"; private MyReceiver myReceiver = new MyReceiver(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_broadcast); //创建一个过滤器 IntentFilter intentFilter = new IntentFilter(); // 设置要接收的标识 intentFilter.addAction(ACTION); // 注册广播 registerReceiver(myReceiver, intentFilter); Button btnSend = (Button) findViewById(R.id.btnSend); btnSend.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnSend: Intent intent = new Intent(); intent.setAction(ACTION); //这里的Action即我们上边定义的标识,如果不同那么就永远不会受到广播 intent.putExtra("msgInfo", "我是广播,我来了!"); sendBroadcast(intent); //发送广播 break; } } }
如何接收广播
public class MyReceiver extends BroadcastReceiver { public MyReceiver() { } @Override public void onReceive(Context context, Intent intent) { if (intent != null) { // 比较标识是否为中我们想接收的广播,这里做的判断是为了防止出现同时接收到多个我们允许的广播.(即在intent-filter中定义了多个) if (TextUtils.equals(intent.getAction(), BroadcastActivity.ACTION)) { Toast.makeText(context, intent.getStringExtra("msgInfo"), Toast.LENGTH_LONG).show(); } } } }
0 0
- android (3)
- android(3)
- Android(3)
- android-3
- android-3
- Android 3
- android 3
- Android(3)
- Android讲义3---Android常用工具
- [Pro.android.3][读书笔记]Android 01 Android简介 连载
- [Pro.android.3][读书笔记]Android 03 理解Android资源 连载
- Android基础 【Chapter-3】Android widgets(Android控件)
- 热恋Android (3 -- Android项目结构)
- Android拓展系列(3)--Android源码下载
- Android入门3—第一Android程序
- Android拓展系列(3)--Android源码下载
- Android拓展系列(3)--Android源码下载
- Android技术讲座(3):Android应用程序的内容
- 178.All the database users are presently connected to the database instance and working. The HR user
- UVA - 644 Immediate Decodability
- 阿拉伯数字的研究
- freopen、setbuf、linux kill 简单记录
- 9 分解质因数,其实我感觉还是有点难,转了好半天终于转过弯来了。
- Android 3
- 在网页中分享到各大网站的JS代码
- 收藏记录.md
- Java中的三种注释方法
- 欢迎使用CSDN-markdown编辑器
- Oracle 10g 客户端连接远程数据库配置图解
- UVA - 1368 DNA Consensus String
- 【2016 Multi-University Training Contest 6】【1002】【A Simple Chess】
- Linux逻辑卷详细总结