Android 资源文件中@、@android:type、@*、?、@+含义和区别

本文详细介绍了Android开发中四种不同类型的资源引用方式:@用于自定义和系统资源,@*用于系统非public资源,?用于引用主题属性,@+用于创建或引用资源。每种引用方式都有详细的例子和说明。

http://hi.baidu.com/haoziqi/item/392222bedf4ac944bb0e122e

一.@代表引用资源

1.引用自定义资源。格式:@[package:]type/name

android:text="@string/hello"

 

2.引用系统资源。格式:@android:type/name

    android:textColor="@android:color/opaque_red"

  注意:其实@android:type/name 是@[package:]type/name 的一个子类


二.@*代表引用系统的非public资源。格式:@*android:type/name

  系统资源定义分public和非public。public的声明在:

<sdk_path>\platforms\android-8\data\res\values\public.xml

@*android:type/name:可以调用系统定义的所有资源

@android:type/name:只能够调用publi属性的资源。

注意:没在public.xml中声明的资源是google不推荐使用的。


三.?代表引用主题属性

  另外一种资源值允许你引用当前主题中的属性的值。这个属性值只能在style资源和XML属性中使用;它允许你通过将它们改变为当前主题提供的标准变化来改变UI元素的外观,而不是提供具体的值。 例如:

   android:textColor="?android:textDisabledColor" 

   注意,这和资源引用非常类似,除了我们使用一个"?"前缀代替了"@"。当你使用这个标记时,你就提供了属性资源的名称,它将会在主题中被查找,所以你不需要显示声明这个类型(如果声明,其形式就是?android:attr/android:textDisabledColor)。除了使用这个资源的标识符来查询主题中的值代替原始的资源,其命名语法和"@"形式一致:?[namespace:]type/name,这里类型可选。


 四.@+代表在创建或引用资源 。格式:@+type/name

    含义:”+”表示在R.java中名为type的内部类中添加一条记录。如"@+id/button"的含义是在R.java 文件中的id 这个静态内部类添加一条常量名为button。该常量就是该资源的标识符。如果标示符(包括系统资源)已经存在则表示引用该标示符。最常用的就是在定义资源ID中,例如:

  @+id/资源ID名         新建一个资源ID

  @id/资源ID名          应用现有已定义的资源ID,包括系统ID

  @android:id/资源ID名   引用系统ID,其等效于@id/资源ID名

 

  android:id="@+id/selectdlg"

  android:id="@android:id/text1"

  android:id="@id/button3" 


<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" tools:context=".MainActivity"> <!-- 嘉应学院校徽 --> <ImageView android:id="@+id/jyuLogo" android:layout_width="120dp" android:layout_height="120dp" android:src="@drawable/jyu_logo" android:scaleType="centerInside" android:contentDescription="嘉应学院校徽" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginTop="16dp" /> <!-- 学生信息 --> <TextView android:id="@+id/classText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="班级:2305" android:textSize="16sp" android:textStyle="bold" app:layout_constraintTop_toBottomOf="@id/jyuLogo" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="16dp" /> <TextView android:id="@+id/studentIdText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="学号:231020191" android:textSize="16sp" android:textStyle="bold" app:layout_constraintTop_toBottomOf="@id/classText" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="8dp" /> <TextView android:id="@+id/nameText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名:陈嘉欣" android:textSize="16sp" android:textStyle="bold" app:layout_constraintTop_toBottomOf="@id/studentIdText" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="8dp" /> <!-- 应用标题 --> <TextView android:id="@+id/titleText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="chenjiaxin学习计时器" android:textSize="20sp" android:textStyle="bold" android:textColor="@android:color/holo_blue_dark" app:layout_constraintTop_toBottomOf="@id/nameText" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginTop="24dp" /> <!-- 时间显示 --> <TextView android:id="@+id/timeDisplay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="25:00" android:textSize="48sp" android:textStyle="bold" android:textColor="@android:color/holo_red_dark" app:layout_constraintTop_toBottomOf="@id/titleText" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginTop="16dp" /> <!-- 计时模式选择 --> <TextView android:id="@+id/modeLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="计时模式:" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/timeDisplay" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="16dp" /> <RadioGroup android:id="@+id/modeGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintTop_toBottomOf="@id/modeLabel" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="8dp"> <RadioButton android:id="@+id/focusMode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="专注时间" android:checked="true" /> <RadioButton android:id="@+id/shortBreak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="短休息" android:layout_marginStart="16dp" /> <RadioButton android:id="@+id/longBreak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="长休息" android:layout_marginStart="16dp" /> </RadioGroup> <!-- 时间设置 --> <TextView android:id="@+id/timeLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="时间设置:" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/modeGroup" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="16dp" /> <EditText android:id="@+id/timeInput" android:layout_width="80dp" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:inputType="number" android:text="25" android:textAlignment="center" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/timeLabel" /> <TextView android:id="@+id/minuteLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="分钟" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/timeLabel" app:layout_constraintStart_toEndOf="@id/timeInput" app:layout_constraintBaseline_toBaselineOf="@id/timeInput" android:layout_marginStart="8dp" /> <!-- 提醒音设置 --> <CheckBox android:id="@+id/soundCheck" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开启提醒音" android:checked="true" app:layout_constraintTop_toBottomOf="@id/timeInput" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="16dp" /> <!-- 控制按钮 --> <Button android:id="@+id/startButton" android:layout_width="100dp" android:layout_height="wrap_content" android:text="开始" android:backgroundTint="@android:color/holo_green_light" app:layout_constraintTop_toBottomOf="@id/soundCheck" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="20dp" /> <Button android:id="@+id/pauseButton" android:layout_width="100dp" android:layout_height="wrap_content" android:text="暂停" android:backgroundTint="@android:color/holo_orange_light" app:layout_constraintTop_toBottomOf="@id/soundCheck" app:layout_constraintStart_toEndOf="@id/startButton" app:layout_constraintBaseline_toBaselineOf="@id/startButton" android:layout_marginStart="16dp" /> <!-- 历史记录按钮 - 新增在红色区域 --> <Button android:id="@+id/historyButton" android:layout_width="100dp" android:layout_height="wrap_content" android:text="历史记录" android:backgroundTint="@android:color/holo_blue_light" app:layout_constraintTop_toBottomOf="@id/soundCheck" app:layout_constraintStart_toEndOf="@id/pauseButton" app:layout_constraintBaseline_toBaselineOf="@id/startButton" android:layout_marginStart="16dp" /> <!-- 功能按钮 --> <ImageButton android:id="@+id/statsButton" android:layout_width="60dp" android:layout_height="60dp" android:src="@android:drawable/ic_menu_info_details" android:contentDescription="历史记录" android:backgroundTint="@android:color/holo_blue_light" app:layout_constraintTop_toBottomOf="@id/startButton" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="20dp" /> <ImageButton android:id="@+id/settingsButton" android:layout_width="60dp" android:layout_height="60dp" android:src="@android:drawable/ic_popup_reminder" android:contentDescription="打开闹钟" android:backgroundTint="@android:color/holo_purple" android:onClick="openFileManager" app:layout_constraintTop_toBottomOf="@id/startButton" app:layout_constraintStart_toEndOf="@id/statsButton" app:layout_constraintBaseline_toBaselineOf="@id/statsButton" android:layout_marginStart="16dp" /> </androidx.constraintlayout.widget.ConstraintLayout>(以上代码有报错,如何修改)
最新发布
06-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值