- 浏览: 929022 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
itzhongyuan:
java Random类详解 -
david_je:
你好,我看到你在C里面回调JAVA里面的方法是在native里 ...
Android NDK开发(1)----- Java与C互相调用实例详解 -
fykyx521:
请求锁是在 oncreate 释放实在ondestroy?? ...
Android如何保持程序一直运行 -
aduo_vip:
不错,总结得好!
Android读取assets目录下的资源 -
f839903061:
给的网址很给力哦!
Android 4.0.1 源码下载,编译和运行
<com.android.launcher2.DragLayer
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
android:id="@+id/drag_layer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/all_apps" />
<!-- The workspace contains 3 screens of cells -->
<com.android.launcher2.Workspace
android:id="@+id/workspace"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="horizontal"
android:fadeScrollbars="true"
launcher:defaultScreen="2">
注意到其中的两处:
xmlns:launcher=”http://schemas.android.com/apk/res/com.android.launcher”
和
launcher:defaultScreen="2"
可以看出在这个布局文件中,使用了自定义属性。
以前没遇到过,既然这里碰到了,就顺便学习下,下面就写个简单的示例,权当学习笔记,便于以后查阅。
1. 定义一些自定义属性
建立一个属性xml文件: values/attrs.xml, 内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<!-- the relation between the icon and text. -->
<attr name="relation">
<enum name="icon_left" value="0" />
<enum name="icon_right" value="1" />
<enum name="icon_above" value="2" />
<enum name="icon_below" value="3" />
</attr>
<skip />
<declare-styleable name="IconText">
<attr name="relation" />
<attr name="icon" format="reference" />
<attr name="text" format="string" />
<attr name="text_size" format="dimension" />
<attr name="text_color" format="integer" />
<attr name="space" format="dimension" />
</declare-styleable>
</resources>
解释如下:
属性relation有4种可选值:icon_left, icon_right, icon_above,icon_below.
属性icon的可选值为引用: 例如:"@/drawbable/icon".
属性text的可选值为string, 例如: "Hello world", 也可是string的引用"@string/hello".
属性text_size的可选值为尺寸大小,例如:20sp、18dip、20px等.
属性text_color的可选值为整数,例如:"0xfffffff", 也可以是color的引用"@color/white".
2. 定义一个能够处理这些属性值的view或者layout类
package com.braincol.viewattrs;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class IconTextView extends LinearLayout {
private final static String TAG = "IconTextView";
private final int ICON_LEFT = 0;
private final int ICON_RIGHT = 1;
private final int ICON_ABOVE = 2;
private final int ICON_BELOW = 3;
private TextView mTextView;
private ImageView mImageView;
private int mRelation = ICON_LEFT;
private String mText = "";
private int mIconId;
private float mTextSize;
private int mSpace;
public IconTextView(Context context, AttributeSet attrs){
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.IconText);
mRelation = a.getInt(R.styleable.IconText_relation, ICON_LEFT);
Log.d(TAG,"mRelation: "+mRelation);
mText = a.getString(R.styleable.IconText_text);
Log.d(TAG,"mText: "+mText);
mTextSize = a.getDimensionPixelSize(R.styleable.IconText_text_size, 12);
Log.d(TAG,"mTextSize: "+mTextSize);
mSpace = a.getDimensionPixelSize(R.styleable.IconText_space, 5);
Log.d(TAG,"mSpace: "+mSpace);
mIconId = a.getResourceId(R.styleable.IconText_icon, R.drawable.icon);
Log.d(TAG,"mIconId: "+mIconId);
a.recycle();
mTextView = new TextView(context);
mTextView.setText(mText);
mTextView.setTextSize(mTextSize);
mImageView = new ImageView(context);
mImageView.setImageResource(mIconId);
int left = 0;
int top = 0;
int right = 0;
int bottom = 0;
int orientation = HORIZONTAL;
int textViewIndex = 0;
switch(mRelation){
case ICON_ABOVE:
orientation = VERTICAL;
bottom = mSpace;
textViewIndex = 1;
break;
case ICON_BELOW:
orientation = VERTICAL;
top = mSpace;
break;
case ICON_LEFT:
right = mSpace;
textViewIndex = 1;
break;
case ICON_RIGHT:
left = mSpace;
break;
}
this.setOrientation(orientation);
this.addView(mImageView);
mImageView.setPadding(left, top, right, bottom);
this.addView(mTextView, textViewIndex);
}
}
可以看出这个LinearLayout 子类IconTextView中只有两个元素,ImageView 和mTextView,通过从xml配置文件中读取属性值来决定icon和text的内容、相对位置及其它属性。
3. 在layout布局文件中使用这个自定布局及其属性
layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.braincol.viewattrs.IconTextView
android:id="@+id/icontext_01"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:icontext="http://schemas.android.com/apk/res/com.braincol.viewattrs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
icontext:relation="icon_left"
icontext:icon="@drawable/hi"
icontext:text="hi,how are you!"
icontext:text_size="12sp"
/>
</LinearLayout>
可以看到我们在这个布局文件中加入了一个新的命名空间:
xmlns:icontext="http://schemas.android.com/apk/res/com.braincol.viewattrs"
并使用我们自定义的那些属性:
icontext:relation="icon_left"
icontext:icon="@drawable/hi"
icontext:text="hi, how are you !"
icontext:text_size="30sp"
4. 在Activity中使用该布局
package com.braincol.viewattrs;
import android.app.Activity;
import android.os.Bundle;
public class ViewAttrs extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
android:id="@+id/drag_layer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/all_apps" />
<!-- The workspace contains 3 screens of cells -->
<com.android.launcher2.Workspace
android:id="@+id/workspace"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="horizontal"
android:fadeScrollbars="true"
launcher:defaultScreen="2">
注意到其中的两处:
xmlns:launcher=”http://schemas.android.com/apk/res/com.android.launcher”
和
launcher:defaultScreen="2"
可以看出在这个布局文件中,使用了自定义属性。
以前没遇到过,既然这里碰到了,就顺便学习下,下面就写个简单的示例,权当学习笔记,便于以后查阅。
1. 定义一些自定义属性
建立一个属性xml文件: values/attrs.xml, 内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<!-- the relation between the icon and text. -->
<attr name="relation">
<enum name="icon_left" value="0" />
<enum name="icon_right" value="1" />
<enum name="icon_above" value="2" />
<enum name="icon_below" value="3" />
</attr>
<skip />
<declare-styleable name="IconText">
<attr name="relation" />
<attr name="icon" format="reference" />
<attr name="text" format="string" />
<attr name="text_size" format="dimension" />
<attr name="text_color" format="integer" />
<attr name="space" format="dimension" />
</declare-styleable>
</resources>
解释如下:
属性relation有4种可选值:icon_left, icon_right, icon_above,icon_below.
属性icon的可选值为引用: 例如:"@/drawbable/icon".
属性text的可选值为string, 例如: "Hello world", 也可是string的引用"@string/hello".
属性text_size的可选值为尺寸大小,例如:20sp、18dip、20px等.
属性text_color的可选值为整数,例如:"0xfffffff", 也可以是color的引用"@color/white".
2. 定义一个能够处理这些属性值的view或者layout类
package com.braincol.viewattrs;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class IconTextView extends LinearLayout {
private final static String TAG = "IconTextView";
private final int ICON_LEFT = 0;
private final int ICON_RIGHT = 1;
private final int ICON_ABOVE = 2;
private final int ICON_BELOW = 3;
private TextView mTextView;
private ImageView mImageView;
private int mRelation = ICON_LEFT;
private String mText = "";
private int mIconId;
private float mTextSize;
private int mSpace;
public IconTextView(Context context, AttributeSet attrs){
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.IconText);
mRelation = a.getInt(R.styleable.IconText_relation, ICON_LEFT);
Log.d(TAG,"mRelation: "+mRelation);
mText = a.getString(R.styleable.IconText_text);
Log.d(TAG,"mText: "+mText);
mTextSize = a.getDimensionPixelSize(R.styleable.IconText_text_size, 12);
Log.d(TAG,"mTextSize: "+mTextSize);
mSpace = a.getDimensionPixelSize(R.styleable.IconText_space, 5);
Log.d(TAG,"mSpace: "+mSpace);
mIconId = a.getResourceId(R.styleable.IconText_icon, R.drawable.icon);
Log.d(TAG,"mIconId: "+mIconId);
a.recycle();
mTextView = new TextView(context);
mTextView.setText(mText);
mTextView.setTextSize(mTextSize);
mImageView = new ImageView(context);
mImageView.setImageResource(mIconId);
int left = 0;
int top = 0;
int right = 0;
int bottom = 0;
int orientation = HORIZONTAL;
int textViewIndex = 0;
switch(mRelation){
case ICON_ABOVE:
orientation = VERTICAL;
bottom = mSpace;
textViewIndex = 1;
break;
case ICON_BELOW:
orientation = VERTICAL;
top = mSpace;
break;
case ICON_LEFT:
right = mSpace;
textViewIndex = 1;
break;
case ICON_RIGHT:
left = mSpace;
break;
}
this.setOrientation(orientation);
this.addView(mImageView);
mImageView.setPadding(left, top, right, bottom);
this.addView(mTextView, textViewIndex);
}
}
可以看出这个LinearLayout 子类IconTextView中只有两个元素,ImageView 和mTextView,通过从xml配置文件中读取属性值来决定icon和text的内容、相对位置及其它属性。
3. 在layout布局文件中使用这个自定布局及其属性
layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.braincol.viewattrs.IconTextView
android:id="@+id/icontext_01"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:icontext="http://schemas.android.com/apk/res/com.braincol.viewattrs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
icontext:relation="icon_left"
icontext:icon="@drawable/hi"
icontext:text="hi,how are you!"
icontext:text_size="12sp"
/>
</LinearLayout>
可以看到我们在这个布局文件中加入了一个新的命名空间:
xmlns:icontext="http://schemas.android.com/apk/res/com.braincol.viewattrs"
并使用我们自定义的那些属性:
icontext:relation="icon_left"
icontext:icon="@drawable/hi"
icontext:text="hi, how are you !"
icontext:text_size="30sp"
4. 在Activity中使用该布局
package com.braincol.viewattrs;
import android.app.Activity;
import android.os.Bundle;
public class ViewAttrs extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
发表评论
-
Android使用binder访问service的方式
2013-08-23 09:42 16311. 我们先来看一个与本地service通信的例子。 pub ... -
android-Service和Thread的区别
2013-08-23 09:17 914servie是系统的组件,它由系统进程托管(servicema ... -
git介绍
2013-08-01 14:49 1035git介绍 使用Git的第一件事就是设置你的名字和email ... -
cocos2d-x学习之自动内存管理和常见宏
2013-07-29 15:41 9081.自动内存管理 1)概述 C++语言默认是 ... -
cocos2dx中利用xcode 调用java中的函数
2013-07-29 11:36 25251. 先把cocos2dx根目录中的 /Users/zhaos ... -
cocos2dx(v2.x)与(v1.x)的一些常用函数区别讲解
2013-07-29 10:35 1109第一个改动: CCLayer初始化 自定义Layer,类名 ... -
xcode与eclipse整合cocos2dx
2013-07-29 10:32 1220文档xcode版本是 204 1. 在xcode中创建coc ... -
git提交代码
2013-07-23 16:00 10531. 在本地创建一个Git的工作空间,在里面创建一个工程(如H ... -
Android.mk的用法和基础
2013-07-19 14:11 4332一个Android.mk file用来向编译系统描述你的源代码 ... -
eclipse配置NDK-Builder命令
2013-07-18 11:02 10351. 2. -
eclipse配置javah命令
2013-07-18 10:48 19931.找到javah命令所在的目录 我的为 /usr/bi ... -
Android SDL2.0 编译
2013-07-17 13:40 19671,下载: wget http://www.libsdl.o ... -
IntelliJ Idea 常用快捷键列表
2013-05-27 10:19 0Alt+回车 导入包,自动修 ... -
android应用后台安装
2013-05-21 12:02 1015android应用后台安装,静默安装的代码实现方法 http ... -
编译linux内核映像
2013-05-21 11:33 962a)准备交叉编译工具链 android代码树中有一个pr ... -
如何单独编译Android源代码中的模块
2013-05-21 11:29 994一. 首先在Android源代码 ... -
Ubuntu安装JDK6和JDK5
2013-05-19 19:04 1006sudo apt-get install sun-java6- ... -
java_jni详解_01
2013-05-08 17:15 956java中的jni 例子HelloWorld 准备过程: 1 ... -
下载android源码 中断解决原因
2013-05-07 15:51 1315解决方法 1. 浏览器登录https://android.go ... -
mac下编译ffmpeg1.1.4
2013-05-07 14:55 1364经过一番网上搜索 与 无数次的编译 终于成功了 下面献上编译 ...
相关推荐
#### 二、在布局中使用自定义属性 1. **在布局文件中引用自定义属性** 在布局文件中,你可以通过指定属性名称的方式给自定义属性赋值: ```xml android:id="@+id/custom_view" app:customBackgroundColor=...
在上面的代码中,我们使用了一个自定义的 Tab 布局文件 `widget_choose_icon_tab_bg.xml`,该文件代码如下: ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=...
在布局的XML文件中,可以使用`android:background`属性设置填充颜色;在代码中,可以通过`setBackgroundColor()`方法动态更改颜色。 6. **实现步骤**: - 创建一个新的`View`类,继承自`View`或`FrameLayout`。 -...
Decor是Android开发中的一款开源库,其主要目的是简化布局文件中的自定义视图处理,通过在XML布局中注入自定义属性,实现对视图的装饰,从而避免因为自定义视图而频繁创建新类,导致的类爆炸问题。类爆炸问题在大型...
定义和获取属性后,我们可以在XML布局文件中使用这些自定义属性。比如: ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:customTextColor="@color/colorPrimary" app:...
现在,我们可以在XML布局中使用这个自定义属性: ```xml android:layout_width="match_parent" android:layout_height="match_parent" app:rainColor="@color/colorPrimary" /> ``` 至于"RainAnimation"这个...
3. 在布局文件中使用自定义属性: ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:borderWidth="5dp" /> ``` 这里的`app:borderWidth`就是我们自定义的属性,`5dp`是其...
2. **在布局文件中使用**:在XML布局文件中,使用`app:`前缀(对于AndroidX库)或`@namespace/`(对于Support Library)指定自定义命名空间,并引用自定义属性。 ```xml android:layout_width="wrap_content" ...
"Android自定义属性百分比布局"就是一种这样的技术,它允许我们在布局中使用子控件相对于父容器的百分比大小,从而实现响应式设计。下面我们将详细探讨这一主题。 首先,`PercentLayout`是Android支持的一种布局...
现在,我们可以在布局XML文件中使用这个自定义控件,并设置自定义属性: ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:customTextSize="24sp" app:customTextColor=...
为了进一步自定义`Toolbar`,我们可以在XML布局文件中添加其他视图元素,如`TextView`、`ImageView`等。例如,如果你想要在`Toolbar`中添加一个Tab,你可以这样做: ```xml <androidx.appcompat.widget.Toolbar .....
在XML布局中,我们可以通过自定义属性设置吐司的显示时长: ```xml xmlns:app="http://schemas.android.com/apk/res-auto" app:duration="5000" /> ``` 通过这种方式,`CustomToast`将会显示5秒,而不是默认的...
在Android中,我们可以为自定义View定义自己的XML属性,使得在布局文件中更容易配置和使用。这需要以下几个步骤: 1. 在res/values/attrs.xml文件中定义自定义属性,如`progressColor`(进度颜色)、`...
以下将详细介绍如何在Android中使用自定义属性以及它们的工作原理。 一、自定义属性的声明 1. 在res/values目录下创建或编辑attr.xml文件。这个文件是用来定义自定义属性的,例如: ```xml <!-- 定义一个布尔...
在这个案例中,我们将深入探讨如何在自定义View中使用自定义属性。 首先,我们需要了解自定义属性是如何声明的。在Android中,自定义属性通常在项目的`res/values/attrs.xml`文件中定义。例如: ```xml ...
在布局文件中,我们可以像使用系统属性一样使用自定义属性。例如,在一个ImageView中应用这个属性: ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:...
接下来,我们要在自定义组件中使用这些属性。这通常在`onCreateView()`或`onInitializeTextView()`方法中完成,通过`TypedArray`来获取属性值。以下是一个`MyTextView`类的示例: ```java public class MyTextView ...
在res/layout的XML布局文件中,使用`<declare-styleable>`标签来声明自定义控件,并引用刚刚定义的属性。例如,假设我们有一个自定义的按钮: ```xml android:layout_width="wrap_content" android:layout_...
例如,如果一个布局常常由ImageView、ImageButton和TextView组成,我们可以创建一个新的自定义View,将这三个组件集成在一起,这样在代码中只需要引用一个控件,既提高了效率,也使XML布局文件更加简洁。 自定义...
3. 在布局文件中使用自定义属性。 4. 在`AndroidManifest.xml`中声明支持的命名空间,以便在布局编辑器中预览。 通过学习和实践这个简单的实例,你可以掌握Android自定义属性的基本用法,从而更好地定制你的应用...