Re: Светофор

Ну, да, не понял сразу, что разметка не такая. Только потом заметил. А что она, вообще, такое - тоже до конца не ясно. Я паскальщик, у нас layout'ов отродясь не было)

Re: Светофор

Возник вопрос, в папке mipmap обнаружил подпапку ic_launcher_round.png. Для чего она предназначена (поиск в гугле ничего не дал)? Через Image Asset при использовании стандартного названия меняются изображения только в ic_launcher.png.

Re: Светофор

Это круглые иконки приложения. В новых андроидах, вроде бы, используются - на виртуалке Android 7.1 они есть. А до них были квадратные.

Re: Светофор

Здравствуйте, Александр! Полностью сделанный проект не запускался. Выдавалась ошибка 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. В чем может быть проблема? Как исправить?

Re: Светофор

Покажите полностью код активности и разметки. Где-то вы ошибаетесь. Правильным является первый вариант.

56 (edited by Stels 2017-03-28 21:32:55)

Re: Светофор

Ошибка вылетает когда нажимаю кнопку "Красный". Если код изменения цвета фона убрать, то все норм, а если с ним, то "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>

Re: Светофор

У вас корневая разметка ContraintLayout, а не RelativeLayout. Соответственно и код должен соответствовать разметке.
private ConstraintLayout mConstraintLayout;

// в onCreate после setContentView
mConstraintLayout = (ConstraintLayout) findViewById(R.id.relative);

// Click
mConstraintLayout.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.redColor));

Re: Светофор

Я думал на счет ContraintLayout, но не знал как с ним можно поступить. Большое Вам спасибо! Буду работать дальше.

59 (edited by frods 2017-06-01 00:40:25)

Re: Светофор

Добрый день! В чем может быть проблема?
http://s008.radikal.ru/i305/1705/74/4769cd1fa969.png

Re: Светофор

У вас пропущено слово. Зачем вы редактировали текст?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"

Re: Светофор

Точно, благодарю!
Я не специально редактировал, случайно как-то получилось, сам не понял как.

62 (edited by ramazan0504 2017-08-28 15:12:59)

Re: Светофор

а я сделал так и тоже работает, сколько ударов по голове я заслуживаю за такой подход?

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));
            }
        });
    }
}

Re: Светофор

ramazan0504 wrote:

а я сделал так и тоже работает, сколько ударов по голове я заслуживаю за такой подход?

Хороший подход, что Вас смущает?))

64 (edited by ramazan0504 2017-08-28 23:24:33)

Re: Светофор

NeferSky wrote:

Хороший подход, что Вас смущает?))

ну главное, что прием работает и задание из урока выполнил ПО СВОЕМУ,
но все таки если событий будет много то этот подход не подойдет. лучше будет как в примере из статьи "кнопка", которую кстати прочитал после выполнения задания ))

65 (edited by Across 2017-10-09 05:46:35)

Re: Светофор

Не хочет компилировать ни мой код ни код с урока (полностью копировал). Выдет вот такую ошибку.

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);  <-------- в студии последнее слово подчеркнуто красным

В чем может быть проблема?
Заранее благодарен

Re: Светофор

Across wrote:

Не хочет компилировать ни мой код ни код с урока (полностью копировал). Выдет вот такую ошибку.

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, по-видимому, Вы их там не переименовали.

Re: Светофор

Спасибо, разобрался.

Re: Светофор

Вобщем после того как изменил в кнопках обработчик, перестало робить приложение, долго ломал голову что не так, а оказалось что создался файлик activity_main.xml (v21)  в соседней папке дубль http://prntscr.com/hoo0zt
Вопрос зачем он создается и почему не видит изменение в родном файле? хотя при создании родного заполняется один в один.

Неужели при правке в дальнейшем надо искать все файлы дубли для других версий и обновлять код и вних тоже ?
Или есть какая то синхронизация ?

Re: Светофор

Почему в режиме разметки, когда я ставлю фон своему ConstrainLayout через свойство Background, у меня меняется фон и у всех кнопок тоже?

Re: Светофор

ellenripley4 wrote:

Почему в режиме разметки, когда я ставлю фон своему ConstrainLayout через свойство Background, у меня меняется фон и у всех кнопок тоже?

У кнопок проверьте Background - не наследуется ли от разметки?

71 (edited by dmitrybarynov 2019-12-27 23:43:50)

Re: Светофор

Спасибо.
Ваши статьи помогают.

Так проще всего если у каждой заранее задать цвет кнопке

public void onClick(View view) {
        Button myB = (Button) view;
        basicView.setBackground(myB.getBackground());
        colorDeskripton.setText(myB.getText());
    }

Re: Светофор

вот так на 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))
        }

        }


}

Re: Светофор

Почему бы за места  mConstraintLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.greenColor));
не использовать mConstraintLayout.setBackgroundResource(R.color.greenColor);
тоже работает и проще.
В чем разница?

Re: Светофор

Правильно понимаю, что на данный момент лучше выполнять задания через view bindings так как Kotlin Android Extensions устарел?

Re: Светофор

Я предпочитаю по старинке через findViewById. Но можно и через view bindings