当前位置:操作系统 > 安卓/Android >>

Android自定义组件之TextView

   今天我们学习如何自定义TextView组件,让它既能显示文本,又能显示图像,达到“图文并茂”的效果。这种情景在新闻、文章、彩信内容中很常见。下面给出该场景的案例:

一、案例技术要点

1.创建attrs.xml文件用于设置自定义组件的属性、类型和样式。

2.利用android.content.res.TypedArray类将自定义组件装载到程序,以供程序调用。

[java] 
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.customTextView); 

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.customTextView);3.布局文件引入自定义组件需要如下设置

自定义组件命名空间:

[html]
xmlns:custom="http://schemas.android.com/apk/res/com.custom.textview" 

xmlns:custom="http://schemas.android.com/apk/res/com.custom.textview"自定义组件标签:

[html] view plaincopyprint?
<com.custom.textview.CustomTextView .../> 

<com.custom.textview.CustomTextView .../>4.构造一个HashMap数据结构,用于保存自定义组件的内容类型和值。

key:自定义组件的内容类型(image、text)

value:自定义组件的内容值(imageUrl,CharSequence)

5.利用android.widget.LinearLayout.LayoutParams类用于设置组件的布局参数。这里需要根据显示内容的类型动态地设置组件的布局参数。

二、案例代码陈列

AndroidManifest.xml

[html] 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.custom.textview" 
    android:versionCode="1" 
    android:versionName="1.0" > 
 
    <uses-sdk 
        android:minSdkVersion="8" 
        android:targetSdkVersion="15" /> 
     
    <uses-permission android:name="android.permission.INTERNET"/> 
     
    <application 
        android:icon="@drawable/ic_launcher" 
        android:label="@string/app_name"> 
        <activity 
            android:name=".MainActivity" 
            android:label="@string/app_name" > 
            <intent-filter> 
                <action android:name="android.intent.action.MAIN" /> 
 
                <category android:name="android.intent.category.LAUNCHER" /> 
            </intent-filter> 
        </activity> 
    </application> 
     
</manifest> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.custom.textview"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
   
    <uses-permission android:name="android.permission.INTERNET"/>
   
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
   
</manifest>strings.xml

[html] view plaincopyprint?
<resources> 
    <string name="app_name">自定义TextView实现图文并茂</string> 
</resources> 

<resources>
    <string name="app_name">自定义TextView实现图文并茂</string>
</resources>自定义TextView组件的属性类型样式文件:attrs.xml[html] view plaincopyprint?
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="customTextView"> 
        <attr name="image_width" format="dimension" /> 
        <attr name="image_height" format="dimension" /> 
        <attr name="text_color" format="color" /> 
        <attr name="text_size" format="dimension" /> 
    </declare-styleable> 
</resources> 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="customTextView">
        <attr name="image_width" format="dimension" />
        <attr name="image_height" format="dimension" />
        <attr name="text_color" format="color" />
        <attr name="text_size" format="dimension" />
    </declare-styleable>
</resources>main.xml

[java] view plaincopyprint?
<?xml version="1.0" encoding="utf-8" ?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res/com.custom.textview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="@android:color/white" > 
 
    <com.custom.textview.Cust

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,