https://developer.android.com/training/basics/firstapp/building-ui.html#Weight
Я делаю учебник выше, и для его создания я должен был прокомментировать эти строки внутри MainActivity.java внутри папки src (этот код находится в классе MainActivity внутри OnCreate ()).
// Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); // setSupportActionBar(toolbar); // // FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); // fab.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View view) { // Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) // .setAction("Action", null).show(); // } // });
Если я не буду комментировать эти строки, я получаю ошибки «не могу найти» и не могу построить, например:
Ошибка: не удается найти панель инструментов переменных символов
Может кто-нибудь объяснить на английском языке, почему это происходит и как я могу это исправить? Я пробовал различные import.R исправления, которые люди обнаружили, чтобы сражаться с Eclipse, случайно добавляя это, но они не работают. Мой импорт:
import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem;
Я использую Android Studio, как говорится в учебнике, и получаю ту же ошибку при чистой установке. Это мой автоматически сгенерированный импорт? Является ли учебник неправильным или несовместимым с последней версией Android Studio? Являются ли мои настройки сборки неправильными?
Класс R
автоматически генерируется на основе того, что находится в ваших *.xml
файлах, независимо от того, являются ли они строками, размерами, цветами, идентификаторами в макетах и т. Д.
Когда вы вызываете код следующим образом:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
Вы говорите: «Установите переменную панели инструментов в виджет с идентификатором toolbar
».
В xml, скажем, у вас было три текстовых вида:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/text_view_1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/text_view_2" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/text_view_3" />
Когда я R.java
проект, мой файл R.java
будет обновлен, чтобы иметь ссылки в java-коде на те идентификаторы, которые я определил в xml, например:
public static final int text_view_1=0x7f0c0066; public static final int text_view_2=0x7f0c0067; public static final int text_view_3=0x7f0c0068;
Чтобы объяснить это на очень базовом уровне, файл R.java
представляет собой Java-код, который генерируется для ссылки на элементы xml в действительном Java-коде.
Я предполагаю, что когда вы создали проект в Android Studio, он пришел с классом MainActivity.java
. Вот где этот код исходит из того, что вы разместили выше. Часть, MainActivity.java
выше в классе MainActivity.java
по умолчанию,
setContentView(R.layout.activity_main);
Это устанавливает представление активности в файл макета xml, определенный в файле activity_main.xml. Внутри этого макета находится следующее
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true" tools:context=".MainActivity"> <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:theme="@style/AppTheme.AppBarOverlay" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email" /> </android.support.design.widget.CoordinatorLayout>
Я предполагаю, что, возможно, ваш activity_main.xml не содержит этого определения для Toolbar
и виджета FloatingActionButton
.
Если вы действительно хотите начать с нуля, чтобы вы могли следовать руководству, которое вы связали, вы должны удалить MainActivity.java
и просто создать свой собственный.
Я знаю, что это старо, но я собираюсь ответить, потому что этот учебник по-прежнему является лучшим для андроидских студий, и это плохо объясняет эту часть.
OnCreate () создает элементы, которые вы определяете в XML на Java, создавая активность по умолчанию, у вас все еще есть
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
И
fab.setOnClickListener(new View.OnClickListener()
Определенные в OnCreate, студии Android, так как не созданы эти ресурсы в android.R, потому что вы удалили там определения в XML как часть учебника!
Запустите> Очистить и Rerun'app 'или ctrl + F5 на Android Studio