res/values/attrs.xml   自定义属性值

1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3     <!-- 颜色属性值 -->
4     <declare-styleable name="MyView">
5         <attr name="rect_color" format="color"/>
6     </declare-styleable>
7 </resources>

 

自定义控件  ---- 长方形

 1 import android.content.Context;
 2 import android.content.res.TypedArray;
 3 import android.util.AttributeSet;
 4 import android.view.View;
 5 
 6 public class MyRect extends View {
 7 
 8     /** 资源解析程序来使用的 */
 9     public MyRect(Context context, AttributeSet attrs) {
10         super(context, attrs);
11         
12         // 设置颜色属性值
13         TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyView);
14         // 得到颜色值,指定一个默认值,红色。
15         int color = ta.getColor(R.styleable.MyView_rect_color, 0xffff0000);
16         // 设置颜色。
17         setBackgroundColor(color);
18         
19         ta.recycle(); // 循环
20     }
21 
22     public MyRect(Context context) {
23         super(context);
24     }
25 
26 }

 

XML布局文件加载,自定义控件显示:

1)加上,自定义命名空间,其中 com.jikexueyuan.myrect 是包名。

     xmlns:jkxy="http://schemas.android.com/apk/res/com.jikexueyuan.myrect"

2)jkxy:rect_color="#ff00ff00"    才可正常使用。  

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:jkxy="http://schemas.android.com/apk/res/com.jikexueyuan.myrect"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     tools:context="com.jikexueyuan.myrect.MainActivity$PlaceholderFragment" >
 8 
 9     <com.jikexueyuan.myrect.MyRect
10         android:layout_width="100dp"
11         android:layout_height="100dp"
12         jkxy:rect_color="#ff00ff00" />
13 
14 </LinearLayout>
15 
16 <!-- 
17        1)加上,自定义命名空间,其中 com.jikexueyuan.myrect 是包名。
18           xmlns:jkxy="http://schemas.android.com/apk/res/com.jikexueyuan.myrect"
19        2)jkxy:rect_color="#ff00ff00"    才可正常使用。   
20  -->

 

 1 import android.app.Activity;
 2 import android.app.Fragment;
 3 import android.os.Bundle;
 4 import android.view.LayoutInflater;
 5 import android.view.MenuItem;
 6 import android.view.View;
 7 import android.view.ViewGroup;
 8 
 9 public class MainActivity extends Activity {
10 
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main);
15 
16         if (savedInstanceState == null) {
17             getFragmentManager().beginTransaction()
18                     .add(R.id.container, new PlaceholderFragment())
19                     .commit();
20         }
21     }
22 
23     @Override
24     public boolean onOptionsItemSelected(MenuItem item) {
25         int id = item.getItemId();
26         if (id == R.id.action_settings) {
27             return true;
28         }
29         return super.onOptionsItemSelected(item);
30     }
31 
32     /**
33      * A placeholder fragment containing a simple view.
34      */
35     public static class PlaceholderFragment extends Fragment {
36 
37         public PlaceholderFragment() {
38         }
39 
40         @Override
41         public View onCreateView(LayoutInflater inflater, ViewGroup container,
42                 Bundle savedInstanceState) {
43             View rootView = inflater.inflate(R.layout.fragment_main, container, false);
44             return rootView;
45         }
46     }
47 
48 }
1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
2     xmlns:tools="http://schemas.android.com/tools"
3     android:id="@+id/container"
4     android:layout_width="match_parent"
5     android:layout_height="match_parent"
6     tools:context="com.jikexueyuan.myrect.MainActivity"
7     tools:ignore="MergeRootFrame" />