首页 > 代码库 > 1. 自定义视图属性

1. 自定义视图属性

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.MyRect10         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     @Override12     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     @Override24     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         @Override41         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" />

 

1. 自定义视图属性