Урок 17. Создание View-компонент в рабочем приложении

Обсуждение уроков
Алемарика
Сообщения: 7
Зарегистрирован: 17 фев 2015, 12:34

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Алемарика » 07 мар 2015, 18:19

Foenix писал(а):я уже не помню что я делала
попробуй загуглить
http://stackoverflow.com/questions/9208 ... -simulator
http://stackoverflow.com/questions/1894 ... d-emulator
там говорят, что нужно установить доп. клавиатуру как приложение.
Установка - перетаскивание файла apk на эмулятор.
Спасибо. Не помогло (приложение перестала устанавливать, как только он сообщил, что заберет всю информацию с устройства (пароли-явки). Не смогла, рука дрогнула), а другие варианты не подошли.

Дошло, что можно пользоваться виртуальной клавиатурой устройства. Не очень удобно, но лучше, чем отдавать все данные)

Поняла, что зря смеялась над теми, кто не умеет пользоваться поиском. Оказалось, что я с поиском технической информации на неродном языке пока не дружу. В общем, есть куда расти

Аватара пользователя
NovikPY
Сообщения: 26
Зарегистрирован: 31 янв 2015, 21:37
Откуда: Беларусь

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение NovikPY » 16 мар 2015, 14:50

Vladimir991 писал(а):Здравствуйте! Проект делал в Android Studio.
Все работает замечательно, но только не стирает. Не работает метод removeAllViews. Натолкните на ошибку пожалуйста.
Просмотрев код, и сравнив со своим (также делаю в Android Studio), нашел отличия только в

public class MainActivity extends Activity implements View.OnClickListener {

ну и естественно, Ваши импорты, которые Вы так и не показали ;)

Покажите полную версию кода MainActivity.java или уже все работает и все стирает? :D

Аватара пользователя
NovikPY
Сообщения: 26
Зарегистрирован: 31 янв 2015, 21:37
Откуда: Беларусь

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение NovikPY » 16 мар 2015, 14:57

Алемарика писал(а): ...
Использую стандартный эмулятор, реальное устройство пока недоступно для проверки :(. Сможете подсказать в чем может быть проблема?
Заранее спасибо.
За неимением реального устройства, стандартным эмулятором лучше не пользоваться, установите себе альтернативный - Genymotion.
Он и по-шустрее и на нем, меньше проблем, чем со стандартным. ;)

Аватара пользователя
rsdev
Сообщения: 22
Зарегистрирован: 11 фев 2015, 13:11

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение rsdev » 29 апр 2015, 18:38

Добрый день, Уважаемые разработчики.
Вопрос у меня следующий:
В данном примере при добавлении каждого нового компонента в контейнер, он отображается ниже предыдущего.
Есть ли возможность стандартными средствами помещать новый элемент в начало контейнера.
К примеру 5 добавленных элементов отображаются по счету: 5-4-3-2-1 а не 1-2-3-4-5 ?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Foenix » 29 апр 2015, 20:47

мышью тащи куда надо - хоть на экране, хоть в дерево вьюшек
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rsdev
Сообщения: 22
Зарегистрирован: 11 фев 2015, 13:11

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение rsdev » 30 апр 2015, 04:08

Foenix писал(а):мышью тащи куда надо - хоть на экране, хоть в дерево вьюшек
Имею в виду динамическое создание view во время работы приложения, а не работа с визуальным редактором IDE

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение klblk » 30 апр 2015, 06:17

rsdev писал(а):
Foenix писал(а):мышью тащи куда надо - хоть на экране, хоть в дерево вьюшек
Имею в виду динамическое создание view во время работы приложения, а не работа с визуальным редактором IDE
http://developer.android.com/reference/ ... outParams)

Аватара пользователя
rsdev
Сообщения: 22
Зарегистрирован: 11 фев 2015, 13:11

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение rsdev » 30 апр 2015, 19:04

klblk писал(а):
rsdev писал(а):
Foenix писал(а):мышью тащи куда надо - хоть на экране, хоть в дерево вьюшек
Имею в виду динамическое создание view во время работы приложения, а не работа с визуальным редактором IDE
http://developer.android.com/reference/ ... outParams)
Огромное спасибо за подсказку.

Аватара пользователя
wtor
Сообщения: 33
Зарегистрирован: 05 янв 2015, 16:27

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение wtor » 02 май 2015, 12:00

Я не совсем понял, а зачем для кнопки btnCreate второй раз указывать высоту и ширину, ведь мы уже прописывали данные параметры в main.xml? Или я так понял это только для того чтобы указать отступ слева по умолчанию?
Вложения
2015-05-02_14-58-11.png
2015-05-02_14-58-11.png (20.3 КБ) 16186 просмотров

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение doter.ua » 02 май 2015, 15:04

wtor писал(а):Я не совсем понял, а зачем для кнопки btnCreate второй раз указывать высоту и ширину, ведь мы уже прописывали данные параметры в main.xml? Или я так понял это только для того чтобы указать отступ слева по умолчанию?
То у конструктора такой минимальный набор параметров. Можно вместо создания новых парамс взять готовые.
Зависит_от_контейнера.LayoutParams params = view.getLayoutParams();
params.свойство = .. // некоторые свойства без гет\сеттеров
params.setСвойство(...) // другие с ними.

view.setLayoutParams( params );
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

emmure
Сообщения: 4
Зарегистрирован: 19 июн 2015, 20:53

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение emmure » 19 июн 2015, 21:05

Здравствуйте, как сделать то же самое но с TableLayout, то есть чтобы кнопки таблично полностью заполняли область. Вот то что получилось у меня
main.xml

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

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:weightSum="1"
        android:id="@+id/linearLayout">

        <EditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:inputType="time"
            android:ems="10"
            android:id="@+id/etTime"
            android:layout_weight="1.02" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Добавить"
            android:id="@+id/btnCreate" />

    </LinearLayout>

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/linearLayout"
        android:id="@+id/llMain"></TableLayout>
</RelativeLayout>
main_acrivity.java

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

package com.example.pasha.mytest1;

import android.app.Activity;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TableLayout;
import android.widget.TableRow;


public class MainActivity extends Activity implements View.OnClickListener {
    TableLayout llMain;
    EditText etTime;
    Button btnCreate;
    int wrapContent =  RelativeLayout.LayoutParams.WRAP_CONTENT;
    int B_ROWS = 0;
    int B_COLUMNS = 0;

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

        llMain = (TableLayout) findViewById(R.id.llMain);
        etTime = (EditText) findViewById(R.id.etTime);
        btnCreate = (Button) findViewById(R.id.btnCreate);
        btnCreate.setOnClickListener(this);
    }
    public void onClick(View v)
    {
        TableRow tableRow = new TableRow(this);
        tableRow.setLayoutParams(new TableRow.LayoutParams( TableLayout.LayoutParams.WRAP_CONTENT    ,
                TableLayout.LayoutParams.WRAP_CONTENT));
        Button btnNew = new Button(this);
        btnNew.setText(etTime.getText().toString());
        tableRow.addView(btnNew,B_ROWS);
        if (B_ROWS == 4) {
            B_ROWS = 0;
            llMain.addView(tableRow,B_COLUMNS);
            B_COLUMNS++;
        }
        else
        {
            B_ROWS++;
        }

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
Я думал - сначала заполнится tableRow(5 элементов) потом, при добавлении его в TableLayout он отобразится. Но даже так у меня не работает. Хотелось бы чтобы при добавлении каждой кнопки, она сразу отображалась

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение FLancer » 29 июл 2015, 23:57

wtor писал(а):Я не совсем понял, а зачем для кнопки btnCreate второй раз указывать высоту и ширину, ведь мы уже прописывали данные параметры в main.xml? Или я так понял это только для того чтобы указать отступ слева по умолчанию?
А здесь высота и ширина указывается не для самой кнопки btnCreate, а для тех НОВЫХ кнопок которые будут созданы при нажатии на кнопку btnCreate.

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение aleksbim » 30 июл 2015, 15:04

Как можно добавить свойство weight="1" ?

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение FLancer » 31 июл 2015, 16:52

aleksbim писал(а):Как можно добавить свойство weight="1" ?
Либо через конструктор
Изображение

либо также, как и для поля "gravity"

Изображение

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение aleksbim » 02 авг 2015, 12:56

Не могу понять почему у меня не получается.

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

public void plus1(View v){
		float myweight=1F;
		Button plus1=(Button) findViewById(R.id.plus1); plus1.setVisibility(View.GONE);
		LinearLayout ll3stroka = (LinearLayout) findViewById(R.id.ll3stroka);
		LayoutParams viewParams = new LayoutParams(LayoutParams.MATCH_PARENT, 
                LayoutParams.MATCH_PARENT);
		
		
		EditText et_plus1 =new EditText(this);
		et_plus1.requestFocus();
		ll3stroka.weight=myweight;    ????????????????????????
		et_plus1.setLayoutParams(viewParams);
		ll3stroka.addView(et_plus1);
	}
ll3stroka.weight=myweight; weight подчеркнуто красным cannot be resolved or is not a field

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

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение FLancer » 02 авг 2015, 14:59

aleksbim писал(а):Не могу понять почему у меня не получается.

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

public void plus1(View v){
		float myweight=1F;
		Button plus1=(Button) findViewById(R.id.plus1); plus1.setVisibility(View.GONE);
		LinearLayout ll3stroka = (LinearLayout) findViewById(R.id.ll3stroka);
		LayoutParams viewParams = new LayoutParams(LayoutParams.MATCH_PARENT, 
                LayoutParams.MATCH_PARENT);
		
		
		EditText et_plus1 =new EditText(this);
		et_plus1.requestFocus();
		ll3stroka.weight=myweight;    ????????????????????????
		et_plus1.setLayoutParams(viewParams);
		ll3stroka.addView(et_plus1);
	}
ll3stroka.weight=myweight; weight подчеркнуто красным cannot be resolved or is not a field
Всё правильно подчёркивает. Потому что класс LinearLayout ссылкой на объект которого является переменная ll3stroka, не содержит аттрибута weight. Этот атрибут содержит ВЛОЖЕННЫЙ в LinearLayout класс LinearLayout.LayoutParams. А поэтому его нужно задавать не в 11 строке кода, а в 5-й

[syntax=java]LinearLayout.LayoutParams viewParams = new LinearLayout.LayoutParams (LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, myweight);[/syntax]

А если хочется в 11, то тогда нужно задавать не через ссылку ll3stroka, а через ссылку viewParams. И при этом viewParams должна иметь именно тип LinearLayout.LayoutParams, потому что у родительских классов, которые выше по иерархии этого атрибута нет.

[syntax=java]viewParams.weight = myweight[/syntax]

В общем, чтобы с этим не путаться нужно хорошо разобраться "кто на ком стоит", "кто в кого входит" и "кто чьих будет" :)
В самом начале 16 урока про это рассказано доступно и с картинками. Их нужно рассматривать до полного понимания. Если этого будет недостаточно, то можно посмотреть ещё тут и тут.

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение aleksbim » 04 авг 2015, 16:28

Weight=1 - добавлено, gravity - не слушается. Что у меня в коде не так?

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

public void plus1(View v){ 
        int myweight=1; 
        Button plus1=(Button) findViewById(R.id.plus1); plus1.setVisibility(View.GONE); 
        LinearLayout ll3stroka = (LinearLayout) findViewById(R.id.ll3stroka);   
        LinearLayout.LayoutParams weightParams = new LinearLayout.LayoutParams (LayoutParams.MATCH_PARENT,  
                LayoutParams.MATCH_PARENT);
         weightParams.weight=myweight;       
         LinearLayout.LayoutParams centerGravityParams = new LinearLayout.LayoutParams(
                 LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
         centerGravityParams.gravity = Gravity.CENTER;        
        EditText et_plus1 =new EditText(this);  
        et_plus1.setLayoutParams(centerGravityParams); et_plus1.setLayoutParams(weightParams); 
        ll3stroka.addView(et_plus1); 
        et_plus1.requestFocus(); 
    }

iCheater
Сообщения: 1
Зарегистрирован: 13 авг 2015, 11:15

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение iCheater » 13 авг 2015, 11:28

Эм..в обще суть такова.

когда я нажимал ctrl + space чтобы добавить интерфейс OnClickListener я чет случайное нажал и теперь когда я нажимаю ctrl + space у меня появляется DialogInterface.OnClickListener (ну и добавляется import android.content.DialogInterface;)

что я делаю не так?

PS а где можно найти тру альтруиста , который выдержит все глупые и умные вопросы ?)


UPDATE:
вставил вручную View.OnClickListener и появилось диалоговое окно импорта, выбрал там View.OnClickListener нажал ок. как это работает? что гуглить?

Человек
Сообщения: 3
Зарегистрирован: 27 окт 2015, 22:11

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Человек » 28 окт 2015, 16:26

Опечатка "RadoiGroup возвращает ID"

NIKENIT
Сообщения: 1
Зарегистрирован: 10 янв 2016, 12:41

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение NIKENIT » 10 янв 2016, 12:43

Интересный баг. После создания нескольких динамических кнопок, если переключить ориентацию телефона - все кнопки пропадут. Если вернуть старую ориентацию - обратно они не вернутся. Из-за чего такое может происходить?

EDIT: Добавил простой код для проверки количества элементов в лейауте llMain, после комбинации клавиш Ctrl+F12 число обнуляется, т.е. llMain очищается.

Ответить