android 之@+id与@id以及引用中用@+id/的原因

本文探讨了Android XML布局文件中ID定义与引用的方法。针对一种特殊的ID引用方式进行了讨论,并给出了合理的解释。

               在Android xml文件中大家都知道一般在定义一个id时用@+id/id名字,而在引用一个id,比如在已定义的控件的左边,就要用到@id/已定义的控件。


       详细的解释童鞋们可以看这篇文章http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1019/443.html


      今天下了一份代码,在看到xml文件时,突然很疑惑,下面是作者的xml


     

<com.byl.clipheadphoto.clip.ClipImageLayout
    android:id="@+id/id_clipImageLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@+id/rl_botom"
    android:layout_below="@+id/title_bar" />

<RelativeLayout
    android:id="@id/rl_botom"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true"
    android:background="#FFFFFF" >

    <Button
        android:id="@+id/id_action_clip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_margin="10dp"
        android:background="@null"
        android:padding="5dp"
        android:text="确 定"
        android:textColor="#18B4ED"
        android:textSize="16sp" />
</RelativeLayout>


看到作者的写法时感到很疑惑,怎么引用也用到了@+id/,查资料也没找到具体解释,一篇文章中解释@+id 新增一个资源id
而在上面的布局文件中,id_clipImageLayout必须在rl_botom上面,而android:layout_above="@+id/rl_botom"
时,rl_bottom还没有定义,直接@id/rl_bottom会报错,找不到资源rl_bottom,但是xml文件中rl_bottom和id_clipImageLayout
位置种种原因不能调整,怎么办?上面说了@+id/是定义资源,在R.java中生成独一的int型变量,那么就可以直接引用时用
@+id/,等到rl_bottom定义时@+id/会发现已经定义,就不再R.java文件中生成,或者可以用
 android:id="@id/rl_bottom"一样可以的。








数字按钮从0-9进行初始化,请使用最简单的方法进行初始化<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="100dp"> <TextView android:id="@+id/input" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:text="" android:textSize="30sp" /> <TextView android:id="@+id/result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="195dp" android:layout_marginTop="50dp" android:text="" android:textSize="30sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="80dp"> <TextView android:id="@+id/C" android:onClick="oneOnClick" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:gravity="center" android:textSize="30sp" android:text="C"/> <!-- android:background="@drawable/selector_gray1"--> <TextView android:id="@+id/zf" android:onClick="oneOnClick" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:gravity="center" android:textSize="30sp" android:text="+/-"/> <!-- android:background="@drawable/selector_gray1"--> <TextView android:id="@+id/mo" andro
03-10
现在,我的activity_route_plan.xml如下:<?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" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:layout_marginTop="?attr/actionBarSize"> <!-- 垂直三等分 Guideline --> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_left_third" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.33" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_right_third" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.67" /> <!-- 三个 Tab TextView --> <TextView android:id="@+id/tab_fastest" android:layout_width="0dp" android:layout_height="48dp" android:gravity="center" android:text="⏱️ 最快捷" android:textColor="@color/black" android:textSize="14sp" android:background="#B2EBF2" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/guideline_left_third" app:layout_constraintBottom_toTopOf="@id/tv_route_info" android:layout_marginStart="4dp" android:layout_marginEnd="2dp" android:layout_marginTop="4dp" android:layout_marginBottom="4dp"/> <TextView android:id="@+id/tab_transfer" android:layout_width="0dp" android:layout_height="48dp" android:gravity="center" android:text="🚌 最少换乘" android:textColor="@color/black" android:textSize="14sp" android:background="#FFFFFF" app:layout_constraintTop_toTopOf="@id/tab_fastest" app:layout_constraintStart_toEndOf="@id/guideline_left_third" app:layout_constraintEnd_toStartOf="@id/guideline_right_third" app:layout_constraintBottom_toBottomOf="@id/tab_fastest" android:layout_marginStart="2dp" android:layout_marginEnd="2dp" /> <TextView android:id="@+id/tab_walk" android:layout_width="0dp" android:layout_height="48dp" android:gravity="center" android:text="🚶 最少步行" android:textColor="@color/black" android:textSize="14sp" android:background="#FFFFFF" app:layout_constraintTop_toTopOf="@id/tab_fastest" app:layout_constraintStart_toEndOf="@id/guideline_right_third" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="@id/tab_fastest" android:layout_marginStart="2dp" android:layout_marginEnd="4dp" /> <!-- TextView --> <TextView android:id="@+id/tv_route_info" android:layout_width="0dp" android:layout_height="wrap_content" android:padding="12dp" android:background="#F0F8FF" android:text="正在规划路线..." android:textSize="14sp" android:textColor="#333" android:gravity="center" app:layout_constraintTop_toBottomOf="@id/tab_fastest" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/map_view" /> <!-- 地图区域 --> <com.amap.api.maps.MapView android:id="@+id/map_view" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/tv_route_info" app:layout_constraintBottom_toTopOf="@id/recycler_steps" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHeight_percent="0.45" /> <!-- 步骤列表 --> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_steps" android:layout_width="0dp" android:layout_height="0dp" android:elevation="4dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHeight_percent="0.4" /> </androidx.constraintlayout.widget.ConstraintLayout> 就是这三个TextView看上去不太好看,深色模式倒是还好,浅色模式很难看
最新发布
11-26
项目无法运行package com.example.myapplication; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.RadioGroup; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public abstract class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener, View.OnClickListener { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, "onCreate: "); } @Override protected void onStart() { super.onStart(); Log.d(TAG, "onStart: "); } @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume: "); } @Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause: "); } @Override protected void onStop() { super.onStop(); Log.d(TAG, "onStop: "); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy: "); } }<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <!-- 标题文本 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请选择选项" android:textSize="18sp" android:layout_marginBottom="16dp" /> <!-- 单选组 --> <RadioGroup android:id="@+id/radio_group" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginBottom="24dp"> <RadioButton android:id="@+id/radio_option_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选项 1" /> <RadioButton android:id="@+id/radio_option_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选项 2" /> <RadioButton android:id="@+id/radio_option_3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选项 3" /> </RadioGroup> <!-- 确认按钮 --> <Button android:id="@+id/btn_confirm" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="确认选择" /> </LinearLayout>
10-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值