Урок 18. Меняем layoutParams в рабочем приложении

Обсуждение уроков
skortabeast
Сообщения: 4
Зарегистрирован: 25 фев 2015, 21:21

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение skortabeast » 25 фев 2015, 21:25

дошел до 18 урока, и все, короч ошибка и приложение крашится, юзаю андроид студио
если у кого такое было, маякните
вопрос закрыт, если у кого будет такое , то класс MainActivity пабликом делайте
02-25 18:16:59.458 2331-2331/ru.startandroid.p0181dynamiclayout3 D/AndroidRuntime﹕ Shutting down VM
02-25 18:16:59.459 2331-2331/ru.startandroid.p0181dynamiclayout3 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: ru.startandroid.p0181dynamiclayout3, PID: 2331
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{ru.startandroid.p0181dynamiclayout3/ru.startandroid.p0181dynamiclayout3.MainActivity}: java.lang.IllegalAccessException: class ru.startandroid.p0181dynamiclayout3.MainActivity is not accessible from class android.app.Instrumentation
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.IllegalAccessException: class ru.startandroid.p0181dynamiclayout3.MainActivity is not accessible from class android.app.Instrumentation
at java.lang.Class.newInstance(Class.java:1557)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-25 18:17:01.819 2331-2331/ru.startandroid.p0181dynamiclayout3 I/Process﹕ Sending signal. PID: 2331 SIG: 9
02-25 18:18:24.719 2400-2400/ru.startandroid.p0181dynamiclayout3 D/AndroidRuntime﹕ Shutting down VM
02-25 18:18:24.719 2400-2400/ru.startandroid.p0181dynamiclayout3 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: ru.startandroid.p0181dynamiclayout3, PID: 2400
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{ru.startandroid.p0181dynamiclayout3/ru.startandroid.p0181dynamiclayout3.MainActivity}: java.lang.IllegalAccessException: class ru.startandroid.p0181dynamiclayout3.MainActivity is not accessible from class android.app.Instrumentation
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.IllegalAccessException: class ru.startandroid.p0181dynamiclayout3.MainActivity is not accessible from class android.app.Instrumentation
at java.lang.Class.newInstance(Class.java:1557)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-25 18:18:58.419 2469-2469/ru.startandroid.p0181dynamiclayout3 I/art﹕ Late-enabling -Xcheck:jni
02-25 18:18:58.452 2469-2469/ru.startandroid.p0181dynamiclayout3 D/AndroidRuntime﹕ Shutting down VM
02-25 18:18:58.453 2469-2469/ru.startandroid.p0181dynamiclayout3 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: ru.startandroid.p0181dynamiclayout3, PID: 2469
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{ru.startandroid.p0181dynamiclayout3/ru.startandroid.p0181dynamiclayout3.MainActivity}: java.lang.IllegalAccessException: class ru.startandroid.p0181dynamiclayout3.MainActivity is not accessible from class android.app.Instrumentation
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.IllegalAccessException: class ru.startandroid.p0181dynamiclayout3.MainActivity is not accessible from class android.app.Instrumentation
at java.lang.Class.newInstance(Class.java:1557)
at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)


            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
02-25 18:23:58.625 2469-2469/ru.startandroid.p0181dynamiclayout3 I/Process﹕ Sending signal. PID: 2469 SIG: 9

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение doter.ua » 25 фев 2015, 22:45

Перешли на студию и создаете активити вручную? Может это и полезно для изучения общей структуры, но в боевых условиях все равно будете пользоваться автосозданием.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

msv_serg
Сообщения: 5
Зарегистрирован: 14 май 2015, 15:19

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение msv_serg » 29 май 2015, 20:30

Хотел сделать кнопки без надписей, но программка не работает без кода:
btn1.setText(String.valueOf(leftValue));
btn2.setText(String.valueOf(rightValue));

не пойму в чем причина)

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Donart » 29 май 2015, 21:02

msv_serg писал(а):Хотел сделать кнопки без надписей, но программка не работает без кода:
btn1.setText(String.valueOf(leftValue));
btn2.setText(String.valueOf(rightValue));

не пойму в чем причина)
Уже обсуждалось в этой теме, и ответ дан в уроке.

msv_serg
Сообщения: 5
Зарегистрирован: 14 май 2015, 15:19

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение msv_serg » 30 май 2015, 10:43

Donart писал(а):
msv_serg писал(а):Хотел сделать кнопки без надписей, но программка не работает без кода:
btn1.setText(String.valueOf(leftValue));
btn2.setText(String.valueOf(rightValue));

не пойму в чем причина)
Уже обсуждалось в этой теме, и ответ дан в уроке.
спасибо :)

Quedo
Сообщения: 2
Зарегистрирован: 26 июн 2015, 08:06

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Quedo » 26 июн 2015, 08:15

Здравствуйте я не понял каким образом мы получили доступ к полю weight через метод getLayoutParams(). Для этого же есть setLayoutParams(). Я прочитал все что здесь написано, но ответа не нашел.
Я так понимаю многие хотели спросить именно об этом, а не о разнице переменных ссылочного типа от обычных.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение doter.ua » 26 июн 2015, 08:54

Quedo писал(а):Здравствуйте я не понял каким образом мы получили доступ к полю weight через метод getLayoutParams(). Для этого же есть setLayoutParams(). Я прочитал все что здесь написано, но ответа не нашел.
Я так понимаю многие хотели спросить именно об этом, а не о разнице переменных ссылочного типа от обычных.
Свежесозданный парамс с дефолтными настройками может отличаться от того, что уже есть у элемента. Чтобы ничего не перетереть у вью берут и меняют его собственный парамс.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Quedo
Сообщения: 2
Зарегистрирован: 26 июн 2015, 08:06

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Quedo » 26 июн 2015, 09:25

Я видимо некорректно задал вопрос. Меня смущает надпись такого характера: btn1.getLayoutParams().weight = leftValue, здесь значение поля weight задается через геттер, а не через сеттер. Где об этом можно почитать?

FLancer
Сообщения: 5
Зарегистрирован: 17 ноя 2013, 01:54

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение FLancer » 31 июл 2015, 00:55

Quedo писал(а):Я видимо некорректно задал вопрос. Меня смущает надпись такого характера: btn1.getLayoutParams().weight = leftValue, здесь значение поля weight задается через геттер, а не через сеттер. Где об этом можно почитать?
А где есть такая строчка в коде?

Explo
Сообщения: 7
Зарегистрирован: 03 дек 2015, 17:05

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Explo » 07 дек 2015, 21:15

обьясниете пожалуйста строчку кода
Lparams1 = (LinearLayout.LayoutParams) btn1.getLayoutParams();
никак не могу понять фразу "Мы используем метод getLayoutParams для получения LayoutParams компонента. Но этот метод возвращает базовый ViewGroup.LayoutParams, а нам нужен LinearLayout.LayoutParams, поэтому делаем преобразование. В результате - lParams1 и lParams2 теперь являются LayoutParams для компонентов btn1 и btn2. Т.е. работая, например, с lParams1 мы влияем на btn1"
Может ктонибудь еще сильнее разжевать?

Kazakova_Net
Сообщения: 1
Зарегистрирован: 04 ноя 2017, 00:32

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение Kazakova_Net » 04 ноя 2017, 00:36

Добрый день!
Делаю задание по уроку, но функционал работает кривовато. При движении ползунка кнопки меняют размер неадекватно (см. скрин по ссылке) https://i.imgur.com/af0ZNK0.png
В чем может быть проблема?

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <SeekBar
        android:id="@+id/sbWeight"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:max="100"
        android:progress="50" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Button1" />

        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Button2" />
    </LinearLayout>
</LinearLayout>

Код: Выделить всё

package ru.startandroid.dynamiclayout3;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.SeekBar;

public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener {
    SeekBar sbWeight;
    Button btn1;
    Button btn2;

    LinearLayout.LayoutParams lParams1;
    LinearLayout.LayoutParams lParams2;

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

        sbWeight = findViewById(R.id.sbWeight);
        sbWeight.setOnSeekBarChangeListener(this);

        btn1 = findViewById(R.id.btn1);
        btn2 = findViewById(R.id.btn2);

        lParams1 = (LinearLayout.LayoutParams) btn1.getLayoutParams();
        lParams2 = (LinearLayout.LayoutParams) btn1.getLayoutParams();
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        int leftValue = progress;
        int rightValue = seekBar.getMax() - progress;

        // настраиваем вес
        lParams1.weight = leftValue;
        lParams2.weight = rightValue;

        // в текст кнопок пишем значения переменных
        btn1.setText(String.valueOf(leftValue));
        btn2.setText(String.valueOf(rightValue));
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
}

tavka
Сообщения: 4
Зарегистрирован: 10 фев 2022, 12:32

Re: Урок 18. Меняем layoutParams в рабочем приложении

Сообщение tavka » 10 фев 2022, 12:39

добрый день.
у меня немного другой вопрос. android studio 2021.1.1 patch 1
в activity_main.xml у кнопки можно прописать процедуру обработки клика
<Button
android:id="@+id/btn1"
android:onClick="ActionOnClickButton"

почему такое же нельзя прописать в SeekBar, я про процедуру onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
а приходится уже все это назначать в mainActivity.java
то есть мне удобнее было бы нарисовать в desigen кнопку или seekbar и в списке параметров выбрать нужный action и там уже прописать действия :)))

Ответить