What is better android.R or custom R?

断了今生、忘了曾经 提交于 2019-11-27 05:57:05

问题


When I started developping android applications, I had a tendency to define custom R values wherever I need, in particular in layout files. For instance:

findViewById(R.id.customerName).setText(customer.getName())

with layout:

<TextView android:text="TextView" android:id="@id/customerName"
    android:layout_height="wrap_content" android:layout_width="fill_parent" />

Now I realize, it might be better to use android.R instead.

findViewById(android.R.id.text1).setText(customer.getName())

with layout:

<TextView android:text="TextView" android:id="@android:id/text1"
    android:layout_height="wrap_content" android:layout_width="fill_parent" />

What practice do you follow? What are the advantages and disadvantages of each?


回答1:


android.R is meant for utilizing resources built in to the operating system.

There are many images/layouts/etc... that come with the operating system that you can just reference using android.R

if you are referencing your own resources that you have created, most always use R. and in most situations I recommend trying to stay away from the built in resources as they change version to version.




回答2:


Custom. The system-provided IDs come with a risk of referring, in code, to a resource that is not present in the project. Customs IDs exist iff there's a corresponding resource - a drawable, a view, a layout or what have you.




回答3:


You need your own R.java class as it contains references to all of your resources (layouts, images, strings, etc.)

If you want to get a reference to a View with id of "myView", you would use R.id.myView. If you want to get a reference to built-in Android resources, you would use android.R.id.text

Take a look at the following page:

http://developer.android.com/guide/topics/resources/accessing-resources.html




回答4:


There is no big advantage or disadvantage of the framework id vs the custom id in layouts.

Advantages of using framework identifiers:

  • Avoid the creation of more identifiers. Saves one field in the apk (and there is an apk size limit).
  • Must be used in some situations, like ListActivity

Drawbacks of using framework identifiers:

  • Don't provide a descriptive name

In both practices

  • The code will work in the future
  • Missing references are discovered at runtime, and hidden at compile time

I thought the the samples in the SDK would help me take a decision, and (guess what?) it doesn't. The Notepad and LunarLander applications use the android.R.id for the view identifiers, whereas the ApiDemos project uses custom identifiers.

Best practice for GestureBuilder which mixes both approaches? (@+id/addButton and @android:id/empty)

IHMO, worse practice for HelloActivity and JetBoy which define @+id/text @+id/Button01... This is not descriptive and could have been replaced by (@andoid:id/button1, or by @+id/startButton)



来源:https://stackoverflow.com/questions/7082888/what-is-better-android-r-or-custom-r

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!