为什么我不需要导入android" R"类?

时间:2017-12-12 15:01:55

标签: java android

这是一个java初学者的问题,但它与Android代码有关。

这是我的MainActivity.java

package tld.mydomain.buttonclickcounter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private EditText myEditText;
    private Button myButton;
    private TextView myTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myEditText = (EditText) findViewById(R.id.myEditText);
        myButton = (Button) findViewById(R.id.myButton);
        myTextView = (TextView) findViewById(R.id.myTextView);
    }
}

如您所见,我使用 R 类而无需导入它。怎么可能?我相信在Java中需要导入所有东西。 java编译器如何知道从哪里获取类?我正在使用Android Studio。

2 个答案:

答案 0 :(得分:2)

这是因为您的MainActivity.java位于包名称内,与AndroidManifest.xml中声明的包名称相同:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tld.mydomain.buttonclickcounter">

</manifest>

R.java将根据AndroidManifest.xml 中的包名称生成。因此,如果您使用其他包名称,例如tld.mydomain

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tld.mydomain">

</manifest>

然后您需要使用tld.mydomain.R导入R.java。

答案 1 :(得分:1)

由于R.javaMainActivity.java位于tld.mydomain.buttonclickcounter包内,因此AndroidManifest.xml中提及了您的包。要测试R.java是否在tld.mydomain.buttonclickcounter包内,您可以反编译您的apk。