Re: Светофор
Ну, да, не понял сразу, что разметка не такая. Только потом заметил. А что она, вообще, такое - тоже до конца не ясно. Я паскальщик, у нас layout'ов отродясь не было)
Все вопросы проплачены кошками - всемирно известными производителями котят
You are not logged in. Please login or register.
Для регистрации на форуме следует написать мне письмо. В ответе я напишу правильный ответ для прохождения регистрации.
Форум Александра Климова → Android → Светофор
Ну, да, не понял сразу, что разметка не такая. Только потом заметил. А что она, вообще, такое - тоже до конца не ясно. Я паскальщик, у нас layout'ов отродясь не было)
Возник вопрос, в папке mipmap обнаружил подпапку ic_launcher_round.png. Для чего она предназначена (поиск в гугле ничего не дал)? Через Image Asset при использовании стандартного названия меняются изображения только в ic_launcher.png.
Это круглые иконки приложения. В новых андроидах, вроде бы, используются - на виртуалке Android 7.1 они есть. А до них были квадратные.
Здравствуйте, Александр! Полностью сделанный проект не запускался. Выдавалась ошибка Svetophor has stopped. Я решил сделать все заново и наткнулся на следующую проблему.
Если строчка mRelativeLayout = (RelativeLayout) findViewById(R.id.relative); находится вот так, то выдается ошибка.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRelativeLayout = (RelativeLayout) findViewById(R.id.relative);
mInfoTextView = (TextView) findViewById(R.id.textik);
}
Если так, то проект компилируется без ошибок
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRelativeLayout = (RelativeLayout) findViewById(R.id.relative);
setContentView(R.layout.activity_main);
mInfoTextView = (TextView) findViewById(R.id.textik);
}
Но при этом если я нажимаю на кнопку со следующим кодом, то опять появляется ошибка
public void onClickButtonRed(View view) {
mInfoTextView.setText(R.string.red);
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.redColor));
}
Именно из строчки с mRelativeLayout. В чем может быть проблема? Как исправить?
Покажите полностью код активности и разметки. Где-то вы ошибаетесь. Правильным является первый вариант.
Ошибка вылетает когда нажимаю кнопку "Красный". Если код изменения цвета фона убрать, то все норм, а если с ним, то "Has stopped". Имена всем элементам присвоил, перепроверил.
package com.example.stels.sveto;
import android.support.constraint.ConstraintLayout;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private RelativeLayout mRelativeLayout;
private TextView mInfoTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRelativeLayout = (RelativeLayout) findViewById(R.id.relative);
setContentView(R.layout.activity_main);
mInfoTextView = (TextView) findViewById(R.id.textik);
}
public void onClickButtonRed(View view) {
mInfoTextView.setText(R.string.red);
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.redColor));
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/redColor"
tools:context="com.example.stels.sveto.MainActivity">
<Button
android:id="@+id/buttonRed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/red"
tools:layout_editor_absoluteY="16dp"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginLeft="8dp"
android:onClick="onClickButtonRed"
app:layout_constraintLeft_toLeftOf="parent" />
<Button
android:id="@+id/buttonYellow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/yellow"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="26dp"
app:layout_constraintTop_toBottomOf="@+id/buttonRed" />
<Button
android:id="@+id/buttonGreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/green"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="41dp"
app:layout_constraintTop_toBottomOf="@+id/buttonYellow" />
<TextView
android:id="@+id/textik"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="41dp"
android:text="@string/red"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonGreen" />
</android.support.constraint.ConstraintLayout>
У вас корневая разметка ContraintLayout, а не RelativeLayout. Соответственно и код должен соответствовать разметке.
private ConstraintLayout mConstraintLayout;
// в onCreate после setContentView
mConstraintLayout = (ConstraintLayout) findViewById(R.id.relative);
// Click
mConstraintLayout.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.redColor));
Я думал на счет ContraintLayout, но не знал как с ним можно поступить. Большое Вам спасибо! Буду работать дальше.
Добрый день! В чем может быть проблема?
У вас пропущено слово. Зачем вы редактировали текст?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
Точно, благодарю!
Я не специально редактировал, случайно как-то получилось, сам не понял как.
а я сделал так и тоже работает, сколько ударов по голове я заслуживаю за такой подход?
public class VoronActivity extends AppCompatActivity {
private ConstraintLayout layout;
private TextView textView;
private Button redButton;
private Button greenButton;
private Button yellowButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_voron);
layout = (ConstraintLayout)findViewById(R.id.layout);
textView = (TextView)findViewById(R.id.textView);\
redButton = (Button)findViewById(R.id.button_red);
greenButton = (Button)findViewById(R.id.button_green);
yellowButton = (Button)findViewById(R.id.button_yellow);
onClick(redButton,R.string.red, R.color.colorRed);
onClick(greenButton,R.string.green, R.color.colorGreen);
onClick(yellowButton,R.string.yellow, R.color.colorYellow);
}
public void onClick(Button button, final int resString, final int color) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText(resString);
layout.setBackgroundColor(ContextCompat.getColor(VoronActivity.this, color));
}
});
}
}
а я сделал так и тоже работает, сколько ударов по голове я заслуживаю за такой подход?
Хороший подход, что Вас смущает?))
Хороший подход, что Вас смущает?))
ну главное, что прием работает и задание из урока выполнил ПО СВОЕМУ,
но все таки если событий будет много то этот подход не подойдет. лучше будет как в примере из статьи "кнопка", которую кстати прочитал после выполнения задания ))
Не хочет компилировать ни мой код ни код с урока (полностью копировал). Выдет вот такую ошибку.
Error:(21, 65) error: cannot find symbol variable constraintLayout
Error:(21, 65) error: cannot find symbol variable constraintLayout
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
package across.helloworld;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ConstraintLayout mConstraintLayout;
private TextView mInfoTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mConstraintLayout = (ConstraintLayout) findViewById(R.id.constraintLayout);
mInfoTextView = (TextView) findViewById(R.id.textViewInfo);
}
public void onRedButtonClick(View view) {
mInfoTextView.setText(R.string.red);
mConstraintLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.redColor));
}
public void onYelloButtonClick(View view) {
mInfoTextView.setText(R.string.red);
mConstraintLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.yellowColor));
}
public void onGreenButtonClick(View view) {
mInfoTextView.setText(R.string.red);
mConstraintLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.greenColor));
}
}
В этой части кода:
mConstraintLayout = (ConstraintLayout) findViewById(R.id.constraintLayout); <------- в студии последнее слово подчеркнуто красным
mInfoTextView = (TextView) findViewById(R.id.textViewInfo); <-------- в студии последнее слово подчеркнуто красным
В чем может быть проблема?
Заранее благодарен
Не хочет компилировать ни мой код ни код с урока (полностью копировал). Выдет вот такую ошибку.
Error:(21, 65) error: cannot find symbol variable constraintLayout
Error:(21, 65) error: cannot find symbol variable constraintLayout
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.В этой части кода:
mConstraintLayout = (ConstraintLayout) findViewById(R.id.constraintLayout); <------- в студии последнее слово подчеркнуто красным
mInfoTextView = (TextView) findViewById(R.id.textViewInfo); <-------- в студии последнее слово подчеркнуто краснымВ чем может быть проблема?
За ранее благодарен
В разметке смотрите, как именован layout и textView, по-видимому, Вы их там не переименовали.
Спасибо, разобрался.
Вобщем после того как изменил в кнопках обработчик, перестало робить приложение, долго ломал голову что не так, а оказалось что создался файлик activity_main.xml (v21) в соседней папке дубль http://prntscr.com/hoo0zt
Вопрос зачем он создается и почему не видит изменение в родном файле? хотя при создании родного заполняется один в один.
Неужели при правке в дальнейшем надо искать все файлы дубли для других версий и обновлять код и вних тоже ?
Или есть какая то синхронизация ?
Почему в режиме разметки, когда я ставлю фон своему ConstrainLayout через свойство Background, у меня меняется фон и у всех кнопок тоже?
Почему в режиме разметки, когда я ставлю фон своему ConstrainLayout через свойство Background, у меня меняется фон и у всех кнопок тоже?
У кнопок проверьте Background - не наследуется ли от разметки?
Спасибо.
Ваши статьи помогают.
Так проще всего если у каждой заранее задать цвет кнопке
public void onClick(View view) {
Button myB = (Button) view;
basicView.setBackground(myB.getBackground());
colorDeskripton.setText(myB.getText());
}
вот так на Kotlin(может я ошибку написал, но работает)
package com.android.trafficlight
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.core.content.ContextCompat
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
buttonRed.setOnClickListener {
textView.setText(R.string.Red)
constraintLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.redColor))
}
buttonYellow.setOnClickListener {
textView.setText(R.string.Yellow)
constraintLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.yellowColor))
}
buttonGreen.setOnClickListener {
textView.setText(R.string.Green)
constraintLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.greenColor))
}
}
}
Почему бы за места mConstraintLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.greenColor));
не использовать mConstraintLayout.setBackgroundResource(R.color.greenColor);
тоже работает и проще.
В чем разница?
Правильно понимаю, что на данный момент лучше выполнять задания через view bindings так как Kotlin Android Extensions устарел?
Я предпочитаю по старинке через findViewById. Но можно и через view bindings
Форум Александра Климова → Android → Светофор
Powered by PunBB, supported by Informer Technologies, Inc.